Сканирование IP устройств в локальной сети. Python
Немного подумав, пришел к выводу что самое простое это просто пингануть всю локальную сеть. На самом деле Ping это название утилиты которая входит в ОС, а сама эта хрень называется ICMP Echo-Request( запрос ) и ICMP Echo-Reply( ответ ). К стати пинг не гарантирует что устройство не доступно, так как ответ на пинг может быть просто запрещен на устройстве или брандмауэре .
ICMP (Internet Control Message Protocol — протокол межсетевых управляющих сообщений) — сетевой протокол, входящий в стек протоколов TCP/IP.
Вообщем он там зарыт где то глубоко глубоко, писать реализацию своего стека мне уж точно не под силу. По этому будем пользоваться уже готовой системной утилитой. Для отправки ICMP Echo-Request мы должны иметь права АДМИНИСТРАТОРА ( root ). Поехали.
Первым дело узнаем IP нашего сетевого интерфейса, в какой мы вообще сети :
- socket.AF_INET — для сокета используем IPv4 .
- socket.SOCK_DGRAM — тип сокета. Датаграммный сокет (UDP) .
- getsockname() — Вернет сокету его собственный адрес.
Это наверное не самый элегантный способ.Но должен работать в любой локальной сети, которая позволяет широковещательную рассылку UDP и не требует доступа куда либо. Есть еще идее ? Пишите в комментах )
Далее нам надо узнать платформу. В Windows и Linux команда будет выглядеть немного по разному. Для определение ОС в Питоне есть команды platform.system() которая входит в стандартную библиотеку OS . Возвращает имя системы / ОС, например ‘Linux’ , ‘Windows’ , или ‘Java’ . Пустая строка возвращается, если значение не может быть определено :
Введем диапазон адресов для сканирования :
Ну теперь напишем саму функцию сканирования :
- os.popen(comm) — Класс Popen Python выполняет дочернюю программу в новом процессе.
- data = response.readlines() — читаем ответ от утилиты.
- Дальше просто парсим ответ, если есть TTL в строке значит пинг успешен.
Еще добавим многопоточность что бы быстрей пинговать. Весь код целиком :
Получилось достаточно простая программка. В следующий раз добавим еще отображение MAC адреса и Vendor . Можно еще добавить определение сетевого имени ПК и т.д.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Определяем пинг до сервера
Сначала нужно проверить пинг до сервера подключения и понять, проблема на нашей стороне или на стороне сервера.
1 . В меню Пуск введите cmd , и запустите командную строку.
2 . Напечатайте команду ping google.com –t
Где «google.com» — адрес сервера, до которого мы посылаем пакеты. А «-t» — это непрерывная отправка пакетов.
Нажмите клавишу Enter для выполнения.
3 . В ответ сервер покажет время отклика в мс. Средним показателем является значение 90, хорошим – все, что ниже 40.
На скриншоте показан пример, хорошего низкого пинга без прерываний, что является показателем качественного интернет соединения.
4 . Дополнительно пропингуйте другие сайты. Если высокое значение появляется только на стороне одного сервера, попробуйте поискать ему альтернативу.
Сканирование на основе PING
Настройте диапазон вашей сети (часть «172.10.1»), и все готово. Это предоставит список всех хостов в сети, которые отвечают на эхо-запросы ICMP (ping), и сопоставит их с вашим DNS-сервером.
Примечание. Это не самый надежный способ тестирования живых хостов, поскольку у них может быть заблокирован ICMP.
10 ответов
Откройте командную строку и введите следующее:
измените 192.168.10, чтобы соответствовать вашей собственной сети.
используя -n 1, вы просите отправить на каждый компьютер только 1 пакет вместо обычных 4 пакетов.
вышеуказанная команда будет пинговать все IP-адреса в сети 192.168.10.0 и создавать текстовый документ на диске C: под названием ipaddresses.формат txt. этот текстовый документ должен содержать только IP-адреса, ответившие на ping запрос.
хотя это займет немного больше времени, вы также можете разрешить IP-адреса именам хостов, просто добавив-a к команде ping.
надеюсь, что это помогает
Я знаю, что это поздний ответ, но аккуратный способ сделать это, чтобы пинговать широковещательный адрес, который заполняет ваш локальный кэш ARP.
Это можно показать, запустив arp-a, в котором будут перечислены все адреса в локальной таблице arp.
надеюсь, это хороший аккуратный вариант, который люди могут использовать.
Лучшая утилита с точки зрения скорости в Nmap.
написать @ cmd приглашение:
Это будет просто пинговать все ip-адреса в указанном диапазоне и хранить его в простом текстовом файле
всего 2 секунд для сканирования 255 хосты, использующие Nmap.
этот пост задает тот же вопрос, но для Linux — вы можете найти его полезным. отправить пинг на каждый IP в подсети
nmap, вероятно, лучший инструмент для использования, так как он может помочь идентифицировать хост-ОС, а также быстрее. Он доступен для платформы windows на nmap.org сайт
при условии, что окно windows находится в той же подсети:
для / L %a в (1,1,254) запустите ping 192.168.0.%a
Это будет завершено менее чем за 15 секунд и
вернет любой живой хост.
самый быстрый родной способ, который я знаю в windows.
все, что вы хотите сделать, это посмотреть, подключены ли компьютеры к сети и собрать их IP-адреса. Вы можете использовать сканер angryIP:http://angryip.org/ чтобы узнать, какие IP-адреса используются в определенной подсети или группах подсетей.
Я нашел этот инструмент очень полезным при попытке увидеть, какие IPs используются, которые не находятся внутри моего DHCP.
некоторые вещи, похоже, изменились в пакетных сценариях в Windows 8, и решение выше DGG теперь вызывает сбой командной строки.
для меня сработало следующее решение:
расширение и полезное дополнение к решению «arp-a» egmackenzie для Windows —
Что такое пинг?
Ping — это маленькая программа для проверки соединений в сетях на основе TCP/IP. Смысл её в том, что программа пинг отправляет специальные запросы по протоколу ICMP (ICMP Echo-Request) узлу сети, который надо проверить и фиксирует поступающие от узла пакеты в ответ (ICMP Echo-Reply). Время между отправкой запроса и получением ответа позволяет определять двусторонние задержки по маршруту и частоту потери пакетов. Фактически пинг используют для определения доступности узла и загруженности на каналов передачи данных.
Самый быстрый и простой способ в Windows запустить команду Ping и пропинговать роутер следующий:
Переворачиваем роутер вверх-ногами и смотрим на наклейке какой у него IP-адрес.
Нажимаем кнопку «Пуск» и выбираем пункт «Выполнить». Либо комбинацию клавиш WIN+R:
Пишем команду: ping 192.168.1.1 -t.
Если у Вашего роутера IP-адрес — 192.168.0.1 (как в случае с роутерами D-Link), то команда будет соответственно: ping 192.168.0.1 -t:
Ключ -t означает, что пакеты будут посылаться в бесконечном цикле до тех пор, пока пользователь не нажмет комбинацию клавиш Ctrl+C либо не закроет окно командной строки.
Успешный результат выполнения команды вот такой:
Этот результат говорит о том, что IP-адрес 192.168.1.1 доступен и мы получаем от него ответы на ICMP-запросы. Соответственно роутер доступен с компьютера и можно пробовать зайти в веб-интрерфейс роутера. Как это сделать подробно описано тут.
Если пингуемый IP-адрес недоступен, то результат выполнения команды пинг следующий:
В этом случае Вам надо проверять какой IP-адрес прописан у Вас в настройках сетевой платы, пробовать подключать Ethernet патч-корд в разные порты роутера и если это не поможет — пробовать сбрасывать его настройки. Подробнее смотрите тут.