2016-10-13 20 views
0

私はクラス(python-nmapライブラリを使用することはできません)のためのPythonの単純なポートスキャナで作業しています。アドレス、私はそれがIPの範囲を使用して動作するようにすることはできません。ポートがPythonでIP範囲をスキャンする

これは私が持っているものです。

#!/usr/bin/env python 
from socket import * 
from netaddr import * 

# port scanner 
def port_scan(port, host) 
    s = socket(AF_INET, SOCK_STREAM) 
    try: 
     s = s.connect((host, port)) 
     print "Port ", port, " is open" 
    except Exception, e: 
     pass 

# get user input for range in form xxx.xxx.xxx.xxx-xxx.xxx.xxx.xxx and xx-xx 
ipStart, ipEnd = raw_input ("Enter IP-IP: ").split("-") 
portStart, portEnd = raw_input ("Enter port-port: ").split("-") 

# cast port string to int 
portStart, portEnd = [int(portStart), int(portEnd)] 

# define IP range 
iprange = IPRange(ipStart, ipEnd) 

# this is where my problem is 
for ip in iprange: 
    host = ip 
    for port in range(startPort, endPort + 1) 
     port_scan(port, host) 

だから私は

port_scan(port, host) 
print port # added 

後、私は結局再び

host = ip 
print host # added 

下にprint文を追加した後、コードを実行したときに次の出力を表示します。

[email protected]:~/Desktop/python# python what.py 
Enter IP-IP: 172.16.250.100-172.16.250.104 
Enter port-port: 20-22 
172.16.250.100 
20 
21 
22 
172.16.250.101 
20 
21 
22 
...and so on 

ありがとうございます! 私は得ることができるすべてのヘルプに感謝!

code picture for reference, slightly different

output picture for reference

+4

これらのポートのいくつかが開いていることがわかっていない限り、それ自体で出力されても問題はありません。なぜなら、そうでなければ問題を診断するのに役立つ多種多様なエラーをマスクするので、あなたのコードに 'Exception'を持たせるのは悪い考えです。何が起こっているのかを見るために、 'print'ステートメントをexceptブロックに張っておいてください。 – larsks

+0

はいnetaddr.ip.IPAddressのリストを提供するnetaddr.IPrangeを使用することによって問題が生じるかどうか不思議です。しかし、述べたように、それはあなたのすべてのエラーを隠しているように見えます。 – bravosierra99

+0

ソケットを閉じることを忘れないでください – VPfB

答えて

0

問題は、@ bravosierra99により示唆されるように、netaddr.IPRangeを使用しての問題であることが判明しました。

もう一度おねがいします!

関連する問題