我正在试图弄清楚如何扫描C类ip范围; 例如,用户通过cmd行提供给我的脚本: python script.py 192.168.0.0/24(OR 192.168.0.1-255)
让我们假设我的脚本只执行tcp连接操作:
import socket, sys
host = sys.argv[1],65535
s = socket(AF_INET, SOCK_STREAM)
s.connect(host)
s.send("helloworld")
我真的需要做一个“for ip in ip range”吗?!? 或者内置模块可以做到吗?
谢谢!
答案 0 :(得分:3)
在纯python
中你想要的代码不需要太多代码import socket, struct
def atod(a): # ascii_to_decimal
return struct.unpack("!L",socket.inet_aton(a))[0]
def dtoa(d): # decimal_to_ascii
return socket.inet_ntoa(struct.pack("!L", d))
net,_,mask = sys.argv[1].partition('/')
mask = int(mask)
net = atod(net)
for host in (dtoa(net+n) for n in range(0, 1<<32-mask)):
print host
答案 1 :(得分:2)
ipaddr-py是一个非常方便的处理IP地址和子网的模块。
>>> from ipaddr import IPv4Network
>>> net = IPv4Network('192.168.0.0/24')
>>> for host in net.iterhosts():
... print repr(host)
...
IPv4Address('192.168.0.1')
IPv4Address('192.168.0.2')
IPv4Address('192.168.0.3')
IPv4Address('192.168.0.4')
..... and the rest
答案 2 :(得分:1)
这是一个小工具scanip,可以帮助您获取网络中的所有IP地址及其相应的mac地址(Works on Linux)。这是用python编写的scanip(Ip和Mac扫描程序)的链接。 https://pypi.python.org/pypi/scanip/1.0
您也可以在linux上使用pip install scanip下载它并使用它,在python中创建一个测试文件并像这样使用它 -
import scanip.scanip
scanip.scanip.start_scan()
并运行此程序。局域网中的所有IP及其对应的mac地址都将显示在终端中。
答案 3 :(得分:0)
查看List of IP addresses/hostnames from local network in Python。
没有内置的方法可以做到这一点;你可以使用外部模块或从Python调用其他程序。