2017-03-17 208 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': –