python检测远程udp端口是否打开的方法
本文实例讲述了python检测远程udp端口是否打开的方法。分享给大家供大家参考。具体实现方法如下:
importsocket
importthreading
importtime
importstruct
importQueue
queue=Queue.Queue()
defudp_sender(ip,port):
try:
ADDR=(ip,port)
sock_udp=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock_udp.sendto("abcd...",ADDR)
sock_udp.close()
except:
pass
deficmp_receiver(ip,port):
icmp=socket.getprotobyname("icmp")
try:
sock_icmp=socket.socket(socket.AF_INET,socket.SOCK_RAW,icmp)
exceptsocket.error,(errno,msg):
iferrno==1:
#Operationnotpermitted
msg=msg+(
"-NotethatICMPmessagescanonlybesentfromprocesses"
"runningasroot."
)
raisesocket.error(msg)
raise#raisetheoriginalerror
sock_icmp.settimeout(3)
try:
recPacket,addr=sock_icmp.recvfrom(64)
except:
queue.put(True)
return
icmpHeader=recPacket[20:28]
icmpPort=int(recPacket.encode('hex')[100:104],16)
head_type,code,checksum,packetID,sequence=struct.unpack(
"bbHHh",icmpHeader
)
sock_icmp.close()
ifcode==3andicmpPort==portandaddr[0]==ip:
queue.put(False)
return
defchecker_udp(ip,port):
thread_udp=threading.Thread(target=udp_sender,args=(ip,port))
thread_icmp=threading.Thread(target=icmp_receiver,args=(ip,port))
thread_udp.daemon=True
thread_icmp.daemon=True
thread_icmp.start()
time.sleep(0.1)
thread_udp.start()
thread_icmp.join() thread_udp.join() returnqueue.get(False) if__name__=='__main__': importsys printchecker_udp(sys.argv[1],int(sys.argv[2]))
热门推荐
10 交接同事退休祝福语简短
11 访贫问苦祝福语简短句子
12 留学生祝福语简短
13 美丽祝福语老师文案简短
14 中考祝福语 简短 签状
15 对转校同学祝福语简短
16 升职加薪的祝福语简短
17 宝贝生日祝福语简短独特
18 生日贺卡祝福语英文简短