Если адрес недоступен, вы получите ключевую ошибку от nmap:
import nmap
from netaddr import IPNetwork
nm = nmap.PortScanner()
for loop_1 in IPNetwork('10.0.0.0/26'):
print(nm.scan(loop_1.format(), '22'))
try:
print(nm[loop_1.format()]['tcp'][22]['state'])
except KeyError as e:
pass
работает в айпитоне:
In [5]: paste
import nmap
from netaddr import IPNetwork
nm = nmap.PortScanner()
for loop_1 in IPNetwork('192.168.43.65/30'):
print(loop_1)
print(nm.scan(loop_1.format(), '22'))
try:
print(nm[loop_1.format()]['tcp'][22]['state'])
except KeyError as e:
pass
## -- End pasted text --
192.168.43.64
{'nmap': {'scanstats': {'uphosts': u'0', 'timestr': u'Wed Dec 24 02:41:51 2014', 'downhosts': u'1', 'totalhosts': u'1', 'elapsed': u'3.06'}, 'scaninfo': {u'tcp': {'services': u'22', 'method': u'connect'}}, 'command_line': u'nmap -oX - -p 22 -sV 192.168.43.64'}, 'scan': {}}
192.168.43.65
{'nmap': {'scanstats': {'uphosts': u'0', 'timestr': u'Wed Dec 24 02:41:55 2014', 'downhosts': u'1', 'totalhosts': u'1', 'elapsed': u'3.05'}, 'scaninfo': {u'tcp': {'services': u'22', 'method': u'connect'}}, 'command_line': u'nmap -oX - -p 22 -sV 192.168.43.65'}, 'scan': {}}
192.168.43.66
{'nmap': {'scanstats': {'uphosts': u'1', 'timestr': u'Wed Dec 24 02:42:01 2014', 'downhosts': u'0', 'totalhosts': u'1', 'elapsed': u'6.14'}, 'scaninfo': {u'tcp': {'services': u'22', 'method': u'connect'}}, 'command_line': u'nmap -oX - -p 22 -sV 192.168.43.66'}, 'scan': {u'192.168.43.66': {'status': {'state': u'up', 'reason': u'syn-ack'}, 'hostname': u'lab', 'vendor': {}, 'addresses': {u'ipv4': u'192.168.43.66'}, u'tcp': {22: {'product': '', 'state': u'open', 'version': '', 'name': u'ssh', 'conf': u'10', 'extrainfo': u'protocol 2.0', 'reason': u'syn-ack', 'cpe': ''}}}}}
open # only address up so only open or closed received
Если вам нужен список ips и открыт порт или нет, вы можете использовать исключительно nmap:
nm = nmap.PortScanner()
nm.scan(hosts='10.0.0.0/26',ports="22")
results = [[ip, nm[ip]['tcp'][22]['state']] for ip in nm.all_hosts()]
print("ip {}".format(" ".join(*results)))
ip 10.0.0.1 open
....
person
Padraic Cunningham
schedule
24.12.2014