Kiểm tra xem máy chủ / cổng từ xa có mở không - Không thể sử dụng GNU Netcat cũng như NMap - RHEL 7


17

Tại nơi làm việc, nhóm cơ sở hạ tầng đang triển khai các máy ảo mới với cài đặt RHEL7 làm hệ điều hành cơ sở. Hình ảnh cụ thể này đi kèm với nmap-ncatphiên bản Netcat và chưa cài đặt NMap. Chúng tôi không được cài đặt bất cứ thứ gì trên máy.

Trước đây, chúng tôi đã sử dụng GNU Netcat có -ztùy chọn quét máy chủ / cổng từ xa để kiểm tra xem nó có mở không. Một cái gì đó như thế này:

nc -z -v -w 3 remote.host.name 1234

Làm cách nào tôi có thể đạt được cùng một kiểm tra với cái mới ncatkhông có -ztùy chọn trên hệ thống mà tôi không thể cài đặt nmap?


1
Tại sao bạn kiểm tra xem một cổng được mở / đóng? Đây có phải là một phần của một giải pháp giám sát?
ewwhite

1
Chúng tôi đang làm việc để -zvào Ncat, nhưng nó sẽ không ở Red Hat trong một thời gian, tôi chắc chắn: github.com/nmap/nmap/pull/444
bonsaiviking

@ewwhite Tôi phải kiểm tra xem ACL mạng có mở giữa điểm A và điểm B. Chẳng hạn: máy chủ ứng dụng có thể nói chuyện TCP với máy chủ DB trên cổng 1521.
Jonas Gorauskas

Câu trả lời:


16

Bash cho phép bạn kết nối với các cổng TCP và / hoặc UDP bằng cách chuyển hướng đến các tệp đặc biệt:

/dev/tcp/host/port Nếu máy chủ là tên máy chủ hoặc địa chỉ Internet hợp lệ và cổng là số cổng số nguyên hoặc tên dịch vụ, Bash sẽ cố gắng mở ổ cắm TCP tương ứng.

/dev/udp/host/port Nếu máy chủ là tên máy chủ hoặc địa chỉ Internet hợp lệ và cổng là số cổng số nguyên hoặc tên dịch vụ, Bash sẽ cố gắng mở ổ cắm UDP tương ứng.

Không thể mở hoặc tạo tệp khiến chuyển hướng không thành công.

Vì vậy, để kiểm tra xem bạn có thể kết nối với cổng 80 trên www.example.com hay không thì nên làm như sau:

echo -n > /dev/tcp/www.example.com/80

Nếu cổng bị chặn, bạn sẽ nhận được thông báo "từ chối kết nối" hoặc hết thời gian.


1
Bạn cũng có thể telnet đến cổng
Ryan Babchishin

Có, nhưng cài đặt tối thiểu trong RHEL 7 không bao gồm RPM telnet nơi luôn có bash.
HBruijn

2
Có thật không? Mọi thứ đã thay đổi như thế nào.
Ryan Babchishin

1
@RyanBabchishin cộng với rất nhiều hướng dẫn bảo mật yêu cầu xóa ứng dụng khách telnet trên cơ sở sử dụng nó để đăng nhập vào một thứ khác là không an toàn; bỏ qua việc sử dụng xử lý sự cố lớn của nó.
Jason Martin

@JasonMartin Pfft
Ryan Babchishin

9

Mặc dù Ncat chưa hỗ trợ -z, bạn có thể có hành vi tương tự với chuyển hướng shell:

$ ncat google.com 80 </dev/null >/dev/null && echo "yes"
yes
$ ncat google.com 81 </dev/null >/dev/null && echo "yes"
Ncat: Connection timed out.
$ ncat scanme.nmap.org 1234 </dev/null >/dev/null && echo "yes"
Ncat: Connection refused.

Thời gian chờ kết nối có thể được điều chỉnh với -wtùy chọn.

EDIT: Ncat 7.25BETA2 đã giới thiệu -ztùy chọn hoạt động giống như với netcat GNU, nhưng chỉ trên các cổng đơn. Nếu bạn cần quét phạm vi cổng, bạn nên sử dụng Nmap.


2

Cả netcat, telnet và nmap đều không cần thiết. Bash đơn giản hơn, di động và hiệu quả hơn.

Kiểm tra mở

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" 

Kiểm tra mở / đóng

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" || echo "Closed"

Kiểm tra phạm vi cổng

for i in $(seq 80 88); do (>/dev/tcp/example.com/80/$i) &>/dev/null && echo $i Open|| echo $i Closed; done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.