2017-03-17 207 views
0

我想检查使用Python 3.6如果远程DNS服务器正在侦听端口53 UDP。Python检查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都那么即使该端口是开放的

+1

你有什么试过,有哪些错误? – klutt

+1

您尝试过哪些选项? – Max

+1

你可能想阅读这个,为什么UDP扫描可能完全失败:https://community.qualys.com/docs/DOC-1185 – Max

回答

0

下面的代码可以帮助您扫描端口53/UDP时间:

from socket import * 
import sys, time 
from datetime import datetime 

host = '' 
ports = [53] 

def scan_host(host, port, r_code = 1) : 
    try : 
     s = socket(AF_INET, SOCK_DGRAM) 
     code = s.connect_ex((host, port)) 
     if code == 0 : 
      r_code = code 
     s.close() 
    except Exception, e : 
     pass 
    return r_code 

try : 
    host = raw_input("[*] Enter Target Host Address : ") 
except KeyBoardInterrupt : 
    sys.exit(1) 

hostip = gethostbyname(host) 

for port in ports : 
    try : 
     response = scan_host(host, port) 
     if response == 0 : 
      print("[*] Port %d: Open" % (port)) 
    except Exception, e : 
     pass 

您可以参考this example进一步了解端口扫描。

+0

我已经试过了,即使端口未打开,您也会始终得到'0': –