2016-08-31 12 views
-1

以下は、私がPythonで書いているポートスキャナの反復部分を構成するコードのサンプルです。プログラミング初心者、ポートスキャンを理解するのに役立つ

sock = socket(AF_INET, SOCK_STREAM) 
open_ports_list = [] 

for i in range(port_min, port_max + 1): 
    ipaddress_tup = (ipaddress, i) 
    status = sock.connect_ex(ipaddress_tup) 

    #executed if connect_ex(ipaddress_tup) is successful 
    if status == 0: 
     print('Port',i, 'is OPEN') 
     open_ports_list.append(i) 

    #executed if connect_ex(ipaddress_tup) is unsuccessful 
    else: 
     print('Port',i,'is CLOSED') 

走査システムは、ポート135および136 OPENを有し、しかし、私は上記のコードを実行すると、ポート135が開いているポート136が閉じていることを言います。

私が追加した場合しかし、:

sock = socket(AF_INET, SOCK_STREAM) 

をそのような場合はブロックに:

sock = socket(AF_INET, SOCK_STREAM) 
open_ports_list = [] 

for i in range(port_min, port_max + 1): 
    ipaddress_tup = (ipaddress, i) 
    status = sock.connect_ex(ipaddress_tup) 

    #executed if connect_ex(ipaddress_tup) is successful 
    if status == 0: 
     print('Port',i, 'is OPEN') 
     open_ports_list.append(i) 
     sock = socket(AF_INET, SOCK_STREAM) 

    #executed if connect_ex(ipaddress_tup) is unsuccessful 
    else: 
     print('Port',i,'is CLOSED') 

、コードが正しくOPENとしてポート135および136を識別します。

ここで何が起こっていますか?なぜifブロックのsockを再定義すると問題が解決されるのですか?開いているポートが見つかるたびにsockを再定義する必要なく、正しいポートステータス結果を得ることができますか?

私は、detach()関数を代わりに使用できるというヒントを友人から与えられましたが、その機能や使い方を理解していません。

すべてのご協力をいただければ幸いです。

答えて

1

あなたが知っているオペレーティングシステムでは、ソケットを1回だけ正常に接続できます。

新しいソケットを作成する必要があります。

関連する問題