Сканирование сети C класса Python - PullRequest
0 голосов
/ 16 августа 2010

Я пытаюсь выяснить, как я могу сканировать диапазон ip класса C; Например, пользователь предоставляет строку cmd в мой скрипт: python script.py 192.168.0.0/24 (ИЛИ 192.168.0.1-255)

Давайте подумаем, что мой скрипт выполняет только действие tcp connect:

import socket, sys

host = sys.argv[1],65535

s = socket(AF_INET, SOCK_STREAM)

s.connect(host)

s.send("helloworld")

Мне действительно нужно сделать "для х в диапазоне IP"?!? Или встроенный модуль может это сделать?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 16 августа 2010

Это не займет много кода, вы хотите сделать это на чистом 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
2 голосов
/ 16 августа 2010

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
1 голос
/ 24 апреля 2016

Вот небольшой инструмент сканирования, который поможет вам получить все ip-адреса и их соответствующие mac-адреса в сети (работает на Linux).Это ссылка на сканер (сканер Ip и Mac), написанный на python.https://pypi.python.org/pypi/scanip/1.0

Вы также можете скачать его с помощью pip install scanip на linux и использовать его, создать тестовый файл в python и использовать его следующим образом -

import scanip.scanip

scanip.scanip.start_scan()

и запустить эту программу,Все ip и соответствующие им mac адреса в локальной сети будут отображаться в терминале.

0 голосов
/ 16 августа 2010

Посмотрите на Список IP-адресов / имен хостов из локальной сети в Python .

Нет встроенного способа сделать это;Вы можете использовать внешний модуль или вызвать другую программу из Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...