2

我试着用谷歌搜索,但我没有找到任何东西......我正在构建一个端口扫描仪,我想这样做,我可以扫描一个网络范围,例如 192.168.2.* 并找出有多少台计算机在那在线的范围。很像Nmap。我正在用python编程。这在 Python 中可能吗?

4

4 回答 4

2

使用python-nmap. 基本用法:

import nmap
nm = nmap.PortScanner()
nm.scan(hosts='192.168.2.0/24', arguments='-n -sP -PE -PA21,23,80,3389')
hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()]
for host, status in hosts_list:
    print('{0}:{1}'.format(host, status))

如需进一步参考,请参阅http://pypi.python.org/pypi/python-nmap

于 2010-11-15T16:19:00.877 回答
1

这是您可以开始的草稿示例:

import socket

addr_range = "192.168.1.%d"

ip_address_up = []

# Use UDP. 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.settimeout(2.0)

for i in range(1, 254):
    try:
        ip = addr_range % i
        socket.gethostbyaddr(ip)
        ip_address_up.append(ip)
    except socket.herror as ex:
        pass

print ip_address_up

或类似使用 ICMP ( ping ) 的东西,而不是感谢 UDP:

import socket
import ping

ip_address_up = []

addr_range = "192.168.1.%d"

for i in range(1, 254):       
   try:
       ip = addr_range % i
       delay = ping.do_one(ip, timeout=2)
       ip_address_up.append(ip)
   except (socket.herror, socket.timeout) as ex:
       pass

print ip_address_up
于 2010-11-15T16:42:08.057 回答
0

使用原始套接字,您可以实现类似 nmap 的东西。您可能会发现,与普通编程接口相比,需要使用特制的数据包进行信息最丰富的探测,这些数据包会做“奇怪”的事情。非常值得阅读 IP/UDP/TCP RFCs

使用原始套接字,您可以逐字节地生成您选择的任何探测数据包,其中设置的选项/配置通常在正常情况下是不可能/难以做到的,但它会“欺骗”主机揭示大量信息。

于 2010-11-15T16:22:37.210 回答
0

对于本地网络上的 IPv4,您可以使用Scapy来求助于ARP请参阅相关问题

于 2010-11-15T16:29:33.713 回答