我正在尝试使用Python 3.6检查远程DNS服务器是否正在监听端口53udp。
我就是这么想的:
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
以下代码可帮助您扫描端口53/udp:
有关端口扫描的详细信息,请参阅this example。
基本思想:向该端口发送一个DNS查询。如果有响应,则该端口处于打开状态。
受此启发post
我没有运气用插座做这个用途。端口响应基于target application,不像TCP那样是标准的。我总是使用netcat来实现这一点:
显然,这需要在Linux系统上运行。但是,如果在Windows系统上安装了nmap,则可以尝试以下操作:
相关问题 更多 >
编程相关推荐