如何创建一个TCP监听器?


40

简介:我创建了一个bash函数,该函数可以检查端口是否可用,如果为false,则将其递增1,直到达到某个最大端口号为止。例如,如果端口500不可用,则将检查501的可用性,直到550。

目的:为了测试此bash功能,我需要创建一系列处于LISTEN状态的端口。

尝试:在Windows上,可以使用以下PowerShell命令创建LISTEN端口:

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>

基于此,我试图考虑一个可以在CentOS上执行相同操作的命令,但是我不知道为什么,因此我开始使用Google却没有找到解决该问题的解决方案。

预期的答案:我将接受并认可包含能够创建LISTEN端口的命令的答案,一旦运行该命令,该端口应保持LISTEN状态,即:

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

附带一提:无需进行所有舞步即可找到监听端口。在Linux上:netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu。在* BSD上:netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu
lcd047

Answers:


40

您可以将其nc -l用作执行所需操作的方法。的某些实现nc具有-L允许连接保留的选项。

如果只需要一小会儿,则可以for循环打开此命令,并以这种方式打开一堆端口。

如果需要将这些打开的时间更长,则可以使用超级服务器之一来创建守护程序。


1
相反的-L,我建议: -k--keep-open接受监听模式下的多个连接
曼努埃尔·杜兰

37

您可以使用Netcat创建端口侦听器。

root@ubuntu:~# nc -l 5000

您还可以使用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

您也可以使用nc检查:

Netcat服务器侦听器:

nc -l localhost 5000

Netcat客户端:

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

如果端口未打开

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

4
我必须指定端口,-p否则端口将不起作用:nc -l -p 1234
Leahkim,

nc -l 12345在Ubuntu 16.04中工作
圆石市

对于具有/bin/nc --> nc.traditional(例如debian)的用户,请使用-p上面的@Leahkim建议的选项。
ankostis

6

使用netcat收听。

# nc -l 5555

使用ss检查

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

0

请注意,Debian的netcat软件包具有不同的实现,其中(至少)您需要通过-p选项提供端口,而该-k选项不起作用。您可能会使用Docker遇到此问题。

sudo apt install -y netcat

nc -l -p 1337

您可以考虑openbsd-netcat在该-k选项有效的地方使用。


0

下面的python代码有助于打开虚拟端口

'''使用线程的简单套接字服务器'''import socket import sys HOST =''#符号名,表示所有可用接口PORT = 5500#任意非特权端口s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)打印“套接字创建”

将套接字绑定到本地主机和端口

尝试:s.bind((HOST,PORT))除了socket.error以外为msg:print'绑定失败。错误代码:'+ str(msg [0])+'消息'+ msg [1] sys.exit()打印'套接字绑定完成'

开始在套接字上监听

s.listen(10)打印“正在监听套接字”

现在继续与客户交谈

而1:#等待接受连接-阻止调用conn,addr = s.accept()print'与'+ addr [0] +':'+ str(addr [1])s.close()连接

保存文件并使用python命令运行它,如下所示

〜]#python portlistener.py套接字创建的套接字绑定完成的套接字现在正在监听

然后,您可以从所需的计算机进行验证。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.