Python 2.7 UDP端口扫描程序
你现在能帮我做程序吗问题是,当我进入localhost时,我的程序找不到打开的端口或关闭的端口,如果你真的想帮我,并且你知道如何解决或修复它,请只为我单独编译我的代码,只是现在程序因为某种原因无法接收来自主机的消息,我搜索了整个互联网,没有找到扫描仪有多个UDP端口的任何地方Python 2.7 UDP端口扫描程序,python,udp,Python,Udp,你现在能帮我做程序吗问题是,当我进入localhost时,我的程序找不到打开的端口或关闭的端口,如果你真的想帮我,并且你知道如何解决或修复它,请只为我单独编译我的代码,只是现在程序因为某种原因无法接收来自主机的消息,我搜索了整个互联网,没有找到扫描仪有多个UDP端口的任何地方 import socket import sys # Ask for input remoteServer = raw_input('Enter a remote host to scan: ') remoteSer
import socket
import sys
# Ask for input
remoteServer = raw_input('Enter a remote host to scan: ')
remoteServerIP = socket.gethostbyname(remoteServer)
print( "-" * 60)
print ('Please wait, scanning remote host', remoteServerIP)
print( "-" * 60)
for port in range(1,1025):
try:
sock=socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
sock.sendto('hello',(remoteServerIP,port))
#sock.settimeout(1)
data, address = sock.recvfrom(1024)
if data != None:
print ('Port {}: Open'.format(port))
else:
print ('Port {}: Closed'.format(port))
sock.close()
except socket.error as sock_err:
if(sock_err.errno == socket.errno.ECONNREFUSED):
print sock_err('Connection refused')
except socket.gaierror:
print 'Hostname could not be resolved. Exiting'
except socket.error:
print "Couldn't connect to server"
except KeyboardInterrupt:
print 'You pressed Ctrl+C'
需要使用ICMP数据包。为了使程序正常工作,您需要输入python 我发布我的代码是因为这个问题的答案实际上是不存在的,而且任务实际上是困难的
import socket
import sys
import subprocess
def getServiceName(port, proto):
try:
name = socket.getservbyport(int(port), proto)
except:
return None
return name
UDP_IP = sys.argv[1]
for RPORT in range(int(sys.argv[2]), int(sys.argv[3])):
MESSAGE = "ping"
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
if client == -1:
print("udp socket creation failed")
sock1 = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
if sock1 == -1:
print("icmp socket creation failed")
try:
client.sendto(MESSAGE.encode('utf_8'), (UDP_IP, RPORT))
sock1.settimeout(1)
data, addr = sock1.recvfrom(1024)
except socket.timeout:
serv = getServiceName(RPORT, 'udp')
if not serv:
pass
else:
print('Port {}: Open'.format(RPORT))
except socket.error as sock_err:
if (sock_err.errno == socket.errno.ECONNREFUSED):
print(sock_err('Connection refused'))
client.close()
sock1.close()
你为什么会收到主持人的回复?您是否在本地主机端口上运行服务以侦听并响应“hello”?@FiddleStix是的,但存在一些问题??您的期望值不正确。它在哪里说在任意端口上运行的任意服务必须向您发送对作为请求发送的任意数据段的回复?您需要(1)在使用完套接字后关闭它们(2)将它们连接到目标,以及(3)发送两个请求,两个请求之间有延迟,如果目标不存在,则会在第二次发送时导致异常。为什么这个问题的标题和标签是针对Python 2.7的,而您使用Python 3
print
语法?如果您connect
套接字,那么您经常会从localhost UDP收到相应的错误,任何其他主机的数据包经常消失,你必须超时。还有,为什么你总是打开和关闭套接字?您也没有绑定或连接它们,因此它们可以在每个测试中重用,尤其是ICMP套接字。您还需要解析结果,如果任何其他ICMP数据包(来自一些不相关的代码)进入,您的代码也将接收到它,并且需要知道如何忽略它