一、TCP端口连通性测试
1.服务端
① python
使用python可以方便地启动一个HTTP服务,例如要监听8000端口:
python -m SimpleHTTPServer 8000
当有客户端curl等HTTP请求时会有请求信息打印:
如果要测试IPv6服务,那么服务启动命令如下:
python -c "import socket,SocketServer,CGIHTTPServer;SocketServer.TCPServer.address_family=socket.AF_INET6;CGIHTTPServer.test()" 8006
② ncat
ncat -lkv -c date 8000
参数说明:
-l, --listen Bind and listen for incoming connections
-k, --keep-open Accept multiple connections in listen mode
-v, --verbose Set verbosity level (can be used several times)
-c, --sh-exec <command> Executes the given command via /bin/sh
-c date表示收到请求时执行date命令打印当前系统时间。
ncat默认IPv4和IPv6服务会同时开启。
2.客户端
① telnet
telnet [host [port]]
通常若包含 Connected to ...信息,则说明连接成功。
② curl
Usage: curl [options...] <url>
通常url就为服务端IP:PORT,必要时可以加-m参数来设置超时时间。
curl IPv6的地址稍有不同,需要把IPv6地址用中括号括起来:
③ ncat
Usage: ncat [options] [hostname] [port]
-v, --verbose Set verbosity level (can be used several times)
如果显示Connected to ...表示连接成功;
如果显示Connection refused.表示主机可达,但是端口号不通;
如果显示Connection timed out.表示连接超时,一般为主机不可达;
如果只是测试端口号连通性可以加-z参数:
-z Zero-I/O mode, report connection status only
二、UDP端口连通性测试
1.服务端
① python
python没有现成的模块启动UDP端口服务,需要自己使用socket模块写一个小的脚本,脚本如下:
# coding=utf-8
import socket
import time
# AF_INET表示使用IPv4,AF_INET6表示使用IPv6
# SOCK_DGRAM 则表明数据将是数据报(datagrams)
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.bind(('0.0.0.0', 8000))
while True:
rcv_msg, addr = udp.recvfrom(1024)
client_ip, client_port = addr
print('recvfrom({}:{})[{}]: {}'.format(
client_ip, client_port, time.asctime(), rcv_msg.decode('utf8')))
ack_msg = 'Hello, udp client.'
udp.sendto(ack_msg.encode('utf8'), addr)
将以上文本写入udps.py中,然后使用python执行:
python udps.py
当有请求时会有如下打印:
② ncat
ncat -lkvu -c date 8000
参数说明:
-l, --listen Bind and listen for incoming connections
-k, --keep-open Accept multiple connections in listen mode
-u, --udp Use UDP instead of default TCP
-v, --verbose Set verbosity level (can be used several times)
-c, --sh-exec <command> Executes the given command via /bin/sh
ncat默认IPv4和IPv6服务会同时开启。
2.客户端
① python
python没有现成的模块启动UDP端口服务,需要自己使用socket模块写一个小的脚本,脚本如下:
# coding=utf-8
import socket
import sys
if len(sys.argv) != 3:
print('Usage: {} <host> <port>'.format(sys.argv[0]))
exit(1)
ip = sys.argv[1]
port = int(sys.argv[2])
# AF_INET表示使用IPv4,AF_INET6表示使用IPv6
# SOCK_DGRAM 则表明数据将是数据报(datagrams)
udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_msg = 'Hello udp server.'
udp_client.sendto(client_msg.encode('utf8'), (ip, port))
rcv_msg, addr = udp_client.recvfrom(1024)
print('msg form server:', rcv_msg.decode('utf8'))
将以上文本写入udpc.py中,然后使用python执行:
python udpc.py
请求成功会从服务端返回响应信息:
② ncat
Usage: ncat [options] [hostname] [port]
-u, --udp Use UDP instead of default TCP
-z Zero-I/O mode, report connection status only
-v, --verbose Set verbosity level (can be used several times)
UDP端口连通性正常的话可以从服务端收到一定字节数的报文。