tra-loi-cau-hoi-phat-trien-web.com

Làm cách nào để tạo trình nghe TCP?

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ách sử dụng các lệnh PowerShell này :

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 mong đợi : 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à khi lệnh đã được chạy, cổng sẽ được chạy ở trong trạng thái LISTEN, tức là:

[[email protected] ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*
46
030

Bạn đã có thể sử dụng nc -l như một phương pháp để làm những gì bạn đang tìm kiếm. Một số triển khai của nc-L tù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 vòng lặp for 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.

46
Dana Marble

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

[email protected]:~# nc -l 5000

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

[email protected]:~# 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:

[email protected]:~# nc -v localhost 5000
Connection to localhost 5000 port [tcp/*] succeeded!

nếu cổng không mở

[email protected]:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused
43
sameh Ammar

Nghe bằng netcat.

# nc -l 5555

Kiểm tra bằng ss

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

Lưu ý rằng gói netcat 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 -p và tùy chọn -k tù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ể cân nhắc sử dụng openbsd-netcat thay vì nơi -k tùy chọn hoạt động.

0
thisismydesign

Bên dưới python là hữu ích để mở một cổng giả

'''    Simple socket server using threads
'''
import socket
import sys
Host = ''   # Symbolic name, meaning all available interfaces
PORT = 5500 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
#Bind socket to local Host and port
try:
    s.bind((Host, PORT))
except socket.error as msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()
print 'Socket bind complete'
#Start listening on socket
s.listen(10)
print 'Socket now listening'
#now keep talking with the client
while 1:
    #wait to accept a connection - blocking call
    conn, addr = s.accept()
    print 'Connected with ' + addr[0] + ':' + str(addr[1])
s.close()

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

~]# python portlistener.py
Socket created
Socket bind complete
Socket now listening

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

0
Rohit