Scanning a Class C network Python
I'm trying to figure out how can I scan a class C ip range; For example a user provide by cmd line to my script : python script.py 192.168.0.0/24 (OR 192.168.0.1-255)
Let's figure my script does only a tcp connect action:
import socket, sys
host = sys.argv[1],65535
s = socket(AF_INET, SOCK_STREAM)
s.connect(host)
s.send("helloworld")
Do i really need to do a "for x in ip range" ?!? Or开发者_Go百科 a build in module can do that ?
Thanks !
It doesn't take too much code it you want to do it in pure 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
ipaddr-py is a really handy module for handling IP addresses and subnets.
>>> 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
Here is a small tool scanip that will help you to get all ip addresses and their corresponding mac addresses in the network (Works on Linux). This is the link for scanip (Ip and Mac scanner) written in python. https://pypi.python.org/pypi/scanip/1.0
You can also download it using pip install scanip on linux and to use it , create a test file in python and use it like this-
import scanip.scanip
scanip.scanip.start_scan()
and run this program . All the ip and their corresponding mac addresses in the LAN will be shown in the terminal.
Have a look at List of IP addresses/hostnames from local network in Python.
There's no built-in way to do this; you can either use an external module or call some other program from Python.
精彩评论