扫描C类网络Python

时间:2010-08-16 08:50:46

标签: python networking

我正在试图弄清楚如何扫描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”吗?!? 或者内置模块可以做到吗?

谢谢!

4 个答案:

答案 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调用其他程序。