Làm thế nào để tạo một trình nghe TCP?


40

Giới thiệu: Tôi đã tạo một hàm bash có thể kiểm tra xem một cổng có khả dụng hay không và tăng thêm 1 nếu sai cho đến khi số cổng tối đa nhất định. Ví dụ: nếu cổng 500 không khả dụng thì tính khả dụng của 501 sẽ được kiểm tra cho đến 550.

Mục tiêu: Để kiểm tra chức năng bash này, tôi cần tạo một loạt các cổng ở trạng thái LISTEN.

Nỗ lực: Trên Windows có thể tạo cổng LISTEN bằng các lệnh PowerShell sau:

PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u> $listener = [System.Net.Sockets.TcpListener]1234
PS C:\Users\u> $listener.Start();
PS C:\Users\u> netstat -nat | grep 1234
TCP    0.0.0.0:1234           0.0.0.0:0              LISTENING       InHost
PS C:\Users\u> $listener.Stop();
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u>

Dựa trên điều này, tôi đã cố gắng nghĩ về một lệnh có thể làm tương tự trên CentOS, nhưng tôi không biết tại sao và tôi bắt đầu Google mà không tìm ra giải pháp giải quyết vấn đề này.

Câu trả lời dự kiến : Tôi sẽ chấp nhận và nâng cấp câu trả lời có chứa lệnh có thể tạo cổng LISTEN và một khi lệnh đã được chạy, cổng sẽ ở trạng thái LISTEN, tức là:

[user@host ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*

Một lưu ý phụ: có thể tìm thấy các cổng nghe mà không cần thông qua điệu nhảy này. Trên Linux : netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu. Trên * BSD : netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu.
lcd047

Câu trả lời:


40

Bạn có thể sử dụng nc -lnhư một phương pháp để làm những gì bạn đang tìm kiếm. Một số triển khai nccó một -Ltùy chọn cho phép các kết nối vẫn tồn tại.

Nếu bạn chỉ cần chúng trong một thời gian ngắn, bạn có thể mở lệnh này trong một forvòng lặp và có một loạt các cổng được mở theo cách đó.

Nếu bạn cần những thứ này được mở lâu hơn, bạn có thể sử dụng một trong những siêu máy chủ để tạo daemon.


1
Thay vì -Ltôi sẽ đề nghị: -k, --keep-openchấp nhận nhiều kết nối trong chế độ nghe
Manuel Durando

37

bạn có thể tạo một trình nghe cổng bằng Netcat.

root@ubuntu:~# nc -l 5000

bạn cũng có thể kiểm tra xem cổng có mở hay không sử dụng lệnh netstat.

root@vm-ubuntu:~# netstat -tulpen | grep nc
tcp        0      0 0.0.0.0:5000             0.0.0.0:*               LISTEN      0          710327      17533/nc

bạn cũng có thể kiểm tra với nc:

Máy chủ Netcat lắng nghe:

nc -l localhost 5000

Khách hàng Netcat:

root@vm-ubuntu:~# nc -v localhost 5000
Connection to localhost 5000 port [tcp/*] succeeded!

nếu cổng không mở

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused

4
Tôi đã phải chỉ định cổng với -phoặc nó không hoạt động:nc -l -p 1234
Leahkim

nc -l 12345 đã làm việc trong Ubuntu 16.04
yuen shi

Đối với những người có /bin/nc --> nc.traditional(ví dụ debian), hãy sử dụng -ptùy chọn, như @Leahkim khuyên, ở trên.
ankostis

6

Nghe bằng netcat.

# nc -l 5555

Kiểm tra bằng ss

# ss -nat|grep 5555
LISTEN     0      1                         *:5555                     *:*
#

0

Lưu ý rằng netcatgói của Debian có cách triển khai khác trong đó (ít nhất) bạn cần cung cấp cổng thông qua -ptùy chọn và -ktùy chọn không hoạt động. Bạn có thể gặp phải vấn đề này khi sử dụng Docker.

sudo apt install -y netcat

nc -l -p 1337

Bạn có thể xem xét sử dụng openbsd-netcatthay vì nơi -ktùy chọn hoạt động.


0

Dưới đây mã python là hữu ích để mở một cổng giả

'' 'Máy chủ ổ cắm đơn giản sử dụng các luồng' '' nhập ổ cắm nhập sys HOST = '' # Tên tượng trưng, ​​nghĩa là tất cả các giao diện có sẵn PORT = 5500 # Cổng không đặc quyền tùy ý s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) in 'Ổ cắm được tạo'

Ràng buộc ổ cắm với máy chủ và cổng cục bộ

thử: s.bind ((HOST, PORT)) ngoại trừ socket.error dưới dạng tin nhắn: print 'Bind fail. Mã lỗi: '+ str (tin nhắn [0]) +' Tin nhắn '+ tin nhắn [1] sys.exit () in' Ổ cắm liên kết hoàn thành '

Bắt đầu nghe trên ổ cắm

s.listen (10) in 'Ổ cắm bây giờ đang nghe'

bây giờ tiếp tục nói chuyện với khách hàng

trong khi 1: #wait để chấp nhận kết nối - chặn kết nối cuộc gọi, addr = s.accept () in 'Đã kết nối với' + addr [0] + ':' + str (addr [1]) s.close ()

Lưu tệp và chạy nó bằng lệnh python như dưới đây

~] # python portlistener.py Ổ cắm được tạo Ổ cắm hoàn thành Ổ cắm hiện đang lắng nghe

Sau đó, bạn có thể xác minh từ máy yêu cầu.

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.