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]))
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下