![]() |
Приветствую всех читателей!
Начну с того, а зачем изобретать велосипед, если их уже куча написана? Все мы понимаем, что велосипеды разные - чёрные, белые, красные ))) Когда я посмотрел примеры многопоточных сканеров, то понял, что большая часть из них имеет диапазон типа Код:
for port in range(1,100):Код:
]for port in range(1,20001):Сканеры же, имеющий подобранные порты типа [21, 22, 23, 25, 38, 43, и т.д. были однопоточными, и работали весьма медленно... https://forum.antichat.xyz/attachmen...593d6d7306.png В итоге я решил собрать новый велосипед из старых запчастей. Я хотел следующее: 1) Простой короткий код 2) Многопоточность 3) Указания нужных портов Погнали: Подключаем модуль threading для работы с потоками. Подключаем модуль socket для работы с сокетами (интерфейс для обеспечения обмена данными между процессами) Python: Код:
importPython: Код:
printPython: Код:
defPython: Код:
tryPython: Код:
portsДелаем следующую запись, в которой мы запускаем перебор в цикле портов, создаём и запускаем потоки. Python: Код:
forДля этого я пошагово запустил скрипт в Pycharm. Хост взял наобум из сети, поэтому я его закрасил. Смотрим внимательнее на скрин - когда у нас шаг прошёл создание потока, появилась надпись, в которой мы видим инициализацию нового потока. Значит всё работает как надо. https://forum.antichat.xyz/attachmen...40f34d3474.png На следующем шаге поток запустился. https://forum.antichat.xyz/attachmen...3d81bec5a8.png Если в потоке поставленная задача выполнена, то он останавливается https://forum.antichat.xyz/attachmen...614fe40698.png Результат работы программы наглядно показывает, что потоки закрываются не в том порядке, что открывались. То есть они действительно работают параллельно. На каждый порт запускается отдельный поток. В процессе сканирования, количество потоков разное, взависимости от количества уже отработанных потоков. https://forum.antichat.xyz/attachmen...1bd2fd374e.png На моём стареньком компе 2010 года и модемной связи от сотового оператора, скрипт выполняется за мгновенье. Получилось всё как было задумано. https://forum.antichat.xyz/attachmen...78b90ea913.png Исходный код с подробными комментариями |
Цитата:
Вот тестовый результат: https://forum.antichat.xyz/attachmen...917860437a.png Для примера взял yahoo.com Кстати, для тех кто не понял - можно вбивать в сканер как доменное имя yahoo.com так и ip адрес 87.248.98.7 https://forum.antichat.xyz/attachmen...3da79954fc.png |
привет, подскажите пожалуйста как запустить данный код, с-под винды 7? в каком формате файл сохранить?
|
Цитата:
Для запуска программы должен быть установлен Python3 и поставлены зависимости Пуск --> Выполнить --> cmd.exe: pip install socket pip install threading Потом можно запускать двойным кликом по программе. |
Цитата:
Здесь нет многопоточности. У пользователя нет возможности указать номера портов, а также адрес цели. Предоставленный автором скрипт - не более чем тест на внимательность, а не сканер портов. |
Цитата:
По-моему, это основы языка. |
Цитата:
|
explorer, беда вашего кода не в импортировании библиотек, а в отсутствии всего трёх знаков:
строку connection = s.connect((target, port)) надо заменить: connection = s.connect_ex((target, port)) Метод - connect_ex Но и это не всё ) Вы не вложили в него свою душу. Вы написали его так, как ученик пишет контрольную работу. Написали, сдали и легко вздохнули.
Если-бы гастербайтеры делали свою работу так, как пишут код некоторые пРагРамМысТЫ, то люди жили-бы в руинах. |
Моя_ПреЛесТь никакой ошибки в коде нет, метод connect_ex там совершенно не нужен. То что отсутствует блок try/exect вас смущает, ну так я его не писал, это очевидно. Что касается портов, гораздо проще перечислить порты в коде, чем их постоянно вводить для каждого таргета.
Как это пользователю не предоставлен выбор таргета? Похоже не такой уж вы и внимательный. А это в коде тогда что? target = input('Enter host:\n\n') # Ввод хоста для сканирования Да код не идеальный, я могу как угодно его написать и с ООП, и со всеми обработками ошибок, и с более грамотной многопоточностью через классы а не с Thread и т.д. Это старая статья, цель не стояла написать идеальный код, я писал очень много кода "на все случаи жизни", просто учился. |
Ага, выбор цели я не заметил - каюсь ) Приношу извинения .
explorer, нисколько не сомневаюсь в уровне Ваших знаний, Вы напрасно объясняетесь). Они (знания) неоднократно подтверждены Вами в различных статьях. Вероятно, впреть мне нужно подбирать более мягкие выражения в своих комментариях )) Насчёт метода - я с Вами буду спорить. Самоё интересное, что на форуме имеется ещё одна аналогичная статья, посвящённая многопоточному сканеру портов. Простой многопоточный сканер портов Cenzor воплотил в коде аналогичную Вашему коду многопоточность, использовал ООП и тот-же метод (я считаю - не совсем корректный метод ), а также использовал модули:
Цитата:
Попробуйте в Linux просканировать локальную сеть. Ваши скрипты не обнаружат открытые порты. |
Цитата:
Смотрим доки Цитата:
Какого-то иного смысла в код программы это изменение не вносит. Исключение обрабатывалось изначально. Цитата:
Цитата:
При чём тут необходимость ввода аргумента, если код автора может быть использован в каком-то ином скрипте/программе, где аргументы могут передаваться иными способами. Цитата:
Автор предложил своё видение реализации, вот и всё. Требовать от него чего-то ещё, как минимум неприлично. Хочется - реализуйте сами, не знаете как - задайте вопрос. Цитата:
Вы скрипт-то хоть запускали? |
f22, при всём уважении к тебе, ты чё злой такой ?
Когда глаза отойдут от злобной красноты, попробуй адекватно перечитать мои посты. Я нигде не давал повода тому, что любая программа должна писаться в ООП. Я ни от кого ничего не требую. К конструкции try-except нигде претензий не высказывал. С чего Вы решили, что я должен с вами соглашаться, почему я не имею права на критику ? Цитата:
Запусти и протестируй, вместо того, чтобы аргументировать выдержками из доков. |
Цитата:
Цитата:
Цитата:
Вы упрекаете автора в том, что он по вашему мнению написал код, в который не вложил душу, в котором нет защиты от дурака, код в котором нет изысканности мышления, априори требуя от автора его поменять. Цитата:
Цитата:
Цитата:
Вы критикуете чужой код с позиции "мне такой код не нравится, в нём изысканности мышления нет!" - а это абсолютно нелепый аргумент. Цитата:
https://forum.antichat.xyz/attachmen...032cb19fe9.png |
f22, я не буду реагировать на Ваши [S]портянки[/S] высказывания.
Представьте только, что сейчас начнётся. если мы с Вами начнём учить друг друга правилам хорошего тона. В конце концов, я не ставлю перед собою задачу понравиться Вам. Оставайтесь со своими[S]чертиками в своей голове[/S] своми мыслями. Оставляю за вами право оставаться мелочным и злым. Я не желаю втягиваться в эти разборки. Насчёт работы скрипта. Я наблюдаю совсем иную картину у себя. https://forum.antichat.xyz/attachmen...6c3a11421b.png Скрипт запускался вчера и породил мои негативные комменты, а также сейчас, после ваших комментариев. 192.168.27.1 - роутер с OpenWRT на борту 192.168.27.109 - ноутбук под управлением Debian. К обоим машинам ручное подключение происходит успешно. Метод connect_ex меняет картину на противоположную. Всё ёще с уважением к Вам ) |
Цитата:
Вот результат его работы А вот результат использования метода connect_ex(), на котором вы так настаиваете При том, что nmap выдаёт |
Цитата:
Скорость сканирования по сравнению со сканером, написанным на основе модуля socket - не увеличится. Не думаю, что это "лучше". Или я что-то недопонимаю ? |
Благодарствую! Как раз понадобился портсканер.
Кстати, если кто то захочет писать под себя, немного заглупил со строкой ports = [21... , там если один порт нужен Вам, то без кавычек пишите его, ports = 80 , к примеру. А то я чуть ли не все там переписал из того что можно переписать, не понимал почему не сканирует, а вон оно как вышло) |
Цитата:
|
Цитата:
|
Цитата:
GitHub - gh0x0st/pythonizing_nmap: A detailed guide showing you different ways you can incorporate Python into your workflows around Nmap. A detailed guide showing you different ways you can incorporate Python into your workflows around Nmap. - gh0x0st/pythonizing_nmap github.com |
Цитата:
|
| Время: 02:37 |