我正在尝试使用Python 3.6检查远程DNS服务器是否在53端口上监听UDP。
这是我尝试过的方法:
def check_port(host, port):
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(1)
try:
result = s.connect_ex((host, port))
except socket.gaierror:
s.close()
return 1
s.close()
return result # 0 == Port is open
即使端口关闭,我总是得到0。尝试使用SOCK_STREAM进行TCP通信非常顺畅。
我还尝试了:
def check_port_udp(host, port):
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(1)
try:
s.sendto('ping'.encode(), (host, port))
s.recvfrom(1024)
except socket.timeout:
s.close()
print(1)
return 1
s.close()
print(0)
return 0 # 0 == Port is open
即使端口已经打开,我仍然一直收到 1 的响应。