Сканирование локальной сети на Python методы и примеры кода

Для сканирования локальной сети на Python используйте библиотеку scapy. Она позволяет создавать и анализировать сетевые пакеты, что делает её идеальным инструментом для обнаружения активных устройств. С её помощью вы можете отправлять ARP-запросы и получать ответы от устройств в сети. Это быстрый и надёжный способ определить IP-адреса и MAC-адреса всех подключённых устройств.

Если вам нужно просканировать порты, подключите библиотеку socket. Она предоставляет простой интерфейс для установки соединений и проверки доступности портов. Например, вы можете написать скрипт, который проверяет, открыты ли порты 80 (HTTP) или 443 (HTTPS) на определённом IP-адресе. Это полезно для анализа сетевой безопасности или поиска сервисов.

Для более сложных задач, таких как сканирование всей подсети, используйте комбинацию scapy и concurrent.futures. Это позволит вам распараллелить процесс сканирования и значительно ускорить выполнение задачи. Например, вы можете одновременно отправлять ARP-запросы на все IP-адреса в диапазоне 192.168.1.0/24, чтобы быстро получить список активных устройств.

Пример кода для сканирования сети с использованием scapy:

from scapy.all import ARP, Ether, srp
def scan_network(ip_range):
arp_request = ARP(pdst=ip_range)
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
packet = ether/arp_request
result = srp(packet, timeout=2, verbose=False)[0]
devices = [{'ip': received.psrc, 'mac': received.hwsrc} for sent, received in result]
return devices
print(scan_network("192.168.1.0/24"))

Этот код отправляет ARP-запросы на все устройства в указанной подсети и возвращает список активных устройств с их IP- и MAC-адресами. Вы можете адаптировать его под свои нужды, добавив, например, проверку портов или сохранение результатов в файл.

Основы работы с библиотеками для сканирования сети

Для сканирования локальной сети на Python начните с установки библиотеки scapy. Она позволяет создавать и анализировать сетевые пакеты, что полезно для обнаружения устройств. Установите её командой: pip install scapy.

С помощью scapy можно отправить ARP-запросы для получения MAC-адресов устройств в сети. Пример кода:

from scapy.all import ARP, Ether, srp
def scan_network(ip_range):
arp_request = ARP(pdst=ip_range)
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
packet = ether / arp_request
result = srp(packet, timeout=2, verbose=False)[0]
devices = []
for sent, received in result:
devices.append({'ip': received.psrc, 'mac': received.hwsrc})
return devices
print(scan_network("192.168.1.1/24"))

Для работы с портами используйте библиотеку socket. Она позволяет проверять открытые порты на устройстве. Пример:

import socket
def check_port(ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((ip, port))
sock.close()
return result == 0
print(check_port("192.168.1.1", 80))

Для более сложных задач, таких как анализ трафика, подключите dpkt. Эта библиотека помогает разбирать пакеты и извлекать полезные данные. Установите её через pip install dpkt.

Если нужно сканировать сеть быстро и с минимальными усилиями, попробуйте nmap. Интегрируйте его в Python с помощью библиотеки python-nmap. Пример:

import nmap
def nmap_scan(ip_range):
scanner = nmap.PortScanner()
scanner.scan(hosts=ip_range, arguments='-sn')
return scanner.all_hosts()
print(nmap_scan("192.168.1.1/24"))

Эти инструменты помогут эффективно сканировать сеть и получать данные о её устройствах и портах.

Выбор библиотеки для сетевого сканирования

Для сетевого сканирования на Python используйте библиотеку Scapy. Она предоставляет гибкость для создания и анализа сетевых пакетов, что позволяет реализовать сканирование портов, ARP-запросы и другие задачи. Scapy поддерживает широкий спектр протоколов и работает на низком уровне, что делает её мощным инструментом.

Если вам нужна более простая и быстрая реализация, обратите внимание на socket. Эта встроенная библиотека позволяет создавать TCP/UDP-соединения для проверки доступности портов. Хотя она менее функциональна, чем Scapy, её легко освоить и использовать для базовых задач.

Для многопоточного сканирования попробуйте concurrent.futures. Эта библиотека упрощает параллельное выполнение задач, что ускоряет процесс сканирования больших сетей. В сочетании с socket или Scapy она становится отличным решением для обработки множества хостов одновременно.

Если вы хотите готовое решение, рассмотрите Nmap. Хотя это не Python-библиотека, вы можете интегрировать её с помощью python-nmap. Это даст доступ к мощным функциям Nmap, таким как определение операционной системы и сканирование сервисов.

Выбирайте библиотеку в зависимости от ваших задач. Для экспериментов и кастомизации подходит Scapy, для простоты – socket, а для профессионального использования – интеграция с Nmap.

Установка необходимых пакетов и зависимостей

Для создания сканера локальной сети на Python установите библиотеку scapy, которая упрощает работу с сетевыми пакетами. Выполните команду: pip install scapy. Эта библиотека позволяет отправлять, захватывать и анализировать сетевой трафик.

Дополнительно установите socket и ipaddress, которые входят в стандартную библиотеку Python. Эти модули помогут работать с IP-адресами и сокетами. Если вы планируете сканировать порты, добавьте библиотеку nmap, установив её через pip install python-nmap.

Для визуализации результатов или создания отчётов используйте pandas и matplotlib. Установите их с помощью команд pip install pandas и pip install matplotlib. Эти инструменты помогут структурировать данные и построить графики.

Перед началом работы убедитесь, что у вас установлена последняя версия Python. Проверьте это командой python --version. Если версия устарела, обновите её через официальный сайт Python или используйте менеджер версий pyenv.

Настройка окружения для разработки

Установите Python версии 3.8 или выше, чтобы использовать современные функции языка. Проверьте установку, выполнив команду python --version в терминале.

Создайте виртуальное окружение для изоляции зависимостей проекта. Используйте команду python -m venv myenv, где myenv – имя вашего окружения. Активируйте его:

ОС Команда
Windows myenvScriptsactivate
macOS/Linux source myenv/bin/activate

Установите необходимые библиотеки с помощью pip. Для сканирования сети потребуются scapy и nmap. Выполните команду:

pip install scapy python-nmap

Настройте редактор кода для удобства. Рекомендуем использовать Visual Studio Code или PyCharm. Установите плагины для Python, такие как Pylance и Flake8, чтобы улучшить анализ кода и стиль.

Проверьте доступ к сети и права администратора. Для некоторых операций, таких как сканирование портов, могут потребоваться повышенные привилегии. На Linux используйте sudo, на Windows – запуск терминала от имени администратора.

Сохраните зависимости проекта в файл requirements.txt с помощью команды pip freeze > requirements.txt. Это упростит настройку окружения на других устройствах.

Создание простого сканера локальной сети

Для создания сканера локальной сети на Python используйте библиотеку socket и scapy. Эти инструменты позволяют отправлять запросы на устройства в сети и анализировать ответы. Установите необходимые библиотеки с помощью команды pip install scapy.

Начните с создания функции, которая будет проверять доступность устройств по IP-адресам. Используйте метод socket.gethostbyname для получения IP-адреса по имени хоста. Затем отправьте ICMP-запрос (ping) с помощью scapy, чтобы определить, активно ли устройство.

Пример кода для проверки доступности устройства:


from scapy.all import IP, ICMP, sr1
def check_device(ip):
packet = IP(dst=ip)/ICMP()
response = sr1(packet, timeout=2, verbose=0)
if response:
return f"Устройство {ip} активно"
else:
return f"Устройство {ip} недоступно"

Для сканирования всей сети создайте цикл, который перебирает диапазон IP-адресов. Например, для сети 192.168.1.0/24 проверьте адреса от 192.168.1.1 до 192.168.1.254. Это можно сделать с помощью библиотеки ipaddress.

Пример сканирования сети:


import ipaddress
def scan_network(network):
active_devices = []
for ip in ipaddress.IPv4Network(network):
result = check_device(str(ip))
if "активно" in result:
active_devices.append(str(ip))
return active_devices

Пример таблицы:


from prettytable import PrettyTable
def display_results(devices):
table = PrettyTable(["IP-адрес", "Статус"])
for device in devices:
table.add_row([device, "Активно"])
print(table)

Теперь вы можете объединить все функции в один скрипт. Запустите его, чтобы получить список активных устройств в вашей локальной сети. Этот простой сканер поможет быстро определить, какие устройства подключены к сети, и упростит диагностику.

Пример полного скрипта:


from scapy.all import IP, ICMP, sr1
import ipaddress
from prettytable import PrettyTable
def check_device(ip):
packet = IP(dst=ip)/ICMP()
response = sr1(packet, timeout=2, verbose=0)
if response:
return f"Устройство {ip} активно"
else:
return f"Устройство {ip} недоступно"
def scan_network(network):
active_devices = []
for ip in ipaddress.IPv4Network(network):
result = check_device(str(ip))
if "активно" in result:
active_devices.append(str(ip))
return active_devices
def display_results(devices):
table = PrettyTable(["IP-адрес", "Статус"])
for device in devices:
table.add_row([device, "Активно"])
print(table)
if __name__ == "__main__":
network = "192.168.1.0/24"
active_devices = scan_network(network)
display_results(active_devices)

Этот подход позволяет быстро и эффективно сканировать локальную сеть, не требуя сложных настроек или дополнительного оборудования.

Создание функции для пинга устройств

Для проверки доступности устройств в локальной сети используйте модуль subprocess, который позволяет отправлять ICMP-запросы (ping). Создайте функцию, которая принимает IP-адрес и возвращает результат проверки. Пример реализации:

import subprocess
def ping_device(ip_address):
try:
output = subprocess.run(["ping", "-c", "1", ip_address], capture_output=True, text=True, timeout=2)
if output.returncode == 0:
return True
else:
return False
except subprocess.TimeoutExpired:
return False

Функция отправляет один ICMP-запрос с таймаутом 2 секунды. Если устройство отвечает, возвращается True, иначе – False. Для работы на Windows замените параметр -c на -n в команде ping.

Чтобы проверить несколько устройств, добавьте цикл, который перебирает список IP-адресов и вызывает функцию для каждого из них. Это позволит быстро определить активные устройства в сети.

ip_list = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
for ip in ip_list:
if ping_device(ip):
print(f"{ip} доступен")
else:
print(f"{ip} недоступен")

Для ускорения процесса можно использовать многопоточность. Модуль concurrent.futures поможет выполнить пинг одновременно для нескольких IP-адресов.

Сбор информации о подключенных устройствах

Для получения списка устройств в локальной сети используйте библиотеку scapy. Она позволяет отправлять ARP-запросы и анализировать ответы. Создайте ARP-пакет с помощью ARP(pdst="192.168.1.0/24"), где указан диапазон IP-адресов вашей сети. Затем отправьте его с sr1 и обработайте ответы, чтобы извлечь MAC-адреса и IP.

Чтобы получить больше данных о подключенных устройствах, добавьте сканирование портов. Используйте socket для проверки открытых портов на каждом IP. Например, вызовите socket.connect_ex((ip, port)) для проверки конкретного порта. Это поможет определить тип устройства и его активные сервисы.

Если вам нужна информация о производителе устройства, используйте первые три байта MAC-адреса. Сопоставьте их с базой данных IEEE OUI, доступной в открытом доступе. Это поможет определить, какое устройство подключено к сети: роутер, принтер или смартфон.

Для более глубокого анализа подключите библиотеку nmap. Она предоставляет готовые функции для сканирования сети, включая определение операционной системы и версий ПО. Установите её через pip install python-nmap и используйте nmap.PortScanner() для запуска сканирования.

Помните, что сканирование сети может быть замечено администратором. Используйте эти методы только в разрешённых рамках, например, для диагностики своей сети или с согласия владельца сети.

Для удобства восприятия результатов сканирования локальной сети используйте табличный формат. Это позволит структурировать данные и быстро находить нужную информацию. Например, в Python можно использовать библиотеку prettytable для создания таблиц.

from prettytable import PrettyTable
table = PrettyTable()
table.field_names = ["IP", "MAC Address", "Hostname"]
table.add_row(["192.168.1.1", "00:1A:2B:3C:4D:5E", "Router"])
print(table)

Если результаты сканирования содержат много данных, сохраните их в файл. Используйте формат CSV для простоты обработки в других программах:

import csv
data = [["192.168.1.1", "00:1A:2B:3C:4D:5E", "Router"]]
with open('scan_results.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data)

Для визуализации данных можно использовать графики. Библиотека matplotlib подходит для создания диаграмм, например, распределения устройств по типам:

import matplotlib.pyplot as plt
labels = ['Routers', 'Computers', 'Printers']
sizes = [15, 60, 25]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.show()

Если требуется вывести результаты в консоль, добавьте цветовое выделение. Библиотека colorama поможет сделать текст более читаемым:

from colorama import Fore, Style
print(Fore.GREEN + "Active device: 192.168.1.1" + Style.RESET_ALL)

Для обработки больших объемов данных рассмотрите использование баз данных. SQLite – легкое решение для хранения и запросов:

import sqlite3
conn = sqlite3.connect('network_scan.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE devices (ip TEXT, mac TEXT, hostname TEXT)')
cursor.execute('INSERT INTO devices VALUES ("192.168.1.1", "00:1A:2B:3C:4D:5E", "Router")')
conn.commit()

Обработка ошибок и исключений в коде

Используйте блоки try-except для обработки возможных ошибок при сканировании сети. Например, при работе с библиотекой socket, сетевые ошибки могут возникать из-за недоступности хостов или тайм-аутов. Включите обработку исключений socket.error или TimeoutError, чтобы программа не завершалась аварийно.

  • Обрабатывайте ошибки подключения: try: socket.connect((host, port)) except socket.error as e: print(f"Ошибка подключения: {e}").
  • Устанавливайте тайм-ауты для операций: socket.settimeout(2).
  • Логируйте ошибки для последующего анализа: import logging; logging.basicConfig(filename='network_scan.log', level=logging.ERROR).

При работе с большим количеством хостов, учитывайте возможные ошибки DNS. Используйте try-except для обработки исключений socket.gaierror, которые возникают при невозможности разрешить имя хоста.

  1. Проверяйте доступность портов: try: s.connect((host, port)) except ConnectionRefusedError: print(f"Порт {port} закрыт").
  2. Обрабатывайте ошибки при использовании сторонних библиотек, таких как scapy или nmap, проверяя их документацию на предмет возможных исключений.

Для повышения устойчивости программы, добавляйте обработку неожиданных исключений через except Exception as e. Это поможет отловить ошибки, которые не были учтены в процессе разработки.

Не забывайте тестировать код на различных сценариях, включая случаи с недоступными хостами, перегруженными сетями или некорректными входными данными. Это позволит убедиться, что обработка ошибок работает корректно.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии