Что нового

[Сеть, интернет] Скрипт соединения с сервером посредством TCP/IP

Firestarter

Новичок
Сообщения
40
Репутация
0
Добрый день. Столкнулся с небольшой проблемой. Нужно очень быстро сканировать открытые порты на компах.
Пишу маленький скрипт:

Код:
TCPStartup()
$timer = TimerInit()

$socket = TCPConnect('192.168.10.1', 999) ;соединяемся с сервером
$socket = TCPConnect('192.168.10.2', 999) ;соединяемся с сервером
$socket = TCPConnect('192.168.10.3', 999) ;соединяемся с сервером
$socket = TCPConnect('192.168.10.4', 999) ;соединяемся с сервером
$socket = TCPConnect('192.168.10.5', 999) ;соединяемся с сервером
;и тд около 50 компов

MsgBox (0, 0, TimerDiff($timer))
TCPShutdown()

Проблема в том, что если порты или сервер не доступны, то попытка каждого соединения длится около 1 секунды.
Можно ли как-то запустить скан одновременно на все компы/порты, а не по очереди как в моем скрипте?
Меня устроило бы 5-10 одновременных попыток подключения на порт, если вобще такое возможно.
 

Prog

Осваивающий
Сообщения
337
Репутация
32
Firestarter [?]
Меня устроило бы 5-10 одновременных попыток подключения на порт, если вобще такое возможно.
Возможно, но в рамках autoit не так просто реализуемо. Для решения задачи хорошо подойдет разделение сканирования на множество потоков (скажем несколько сотен).

Другой вариант - использование неблокирующего режима сокетов.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Запустите процессы параллельно.
Вот только сами процессы все равно будут запущены последовательно. Но, думаю, это все же лучше.
Для этого нужно в коде сделать разделение для запуска скрипта с параметром и без.
Тот запуск, что без параметра, является инициирующим. Тот, что с параметром - запускает сканирование.
 
Автор
F

Firestarter

Новичок
Сообщения
40
Репутация
0
Подскажите пожалуйста как?

Я представляю что-то вроде:
1.Написать второй скрипт подключения к TCP порту. Скомпилировать в ЕХЕ
2.Из главного скрипта вызывать данный экзешник 10 раз, передавать ему параметры подключения (на какой IP и порт ему ломиться), и принимать от него параметр "достучался он до TCP порта или нет"

так верно?
 

InnI

AutoIT Гуру
Сообщения
4 486
Репутация
1 217
Firestarter
попытка каждого соединения длится около 1 секунды
Странно :scratch:
Время ожидания TCP-функций определяется опцией "TCPTimeout" и составляет 100мс по умолчанию. У меня ваш скрипт выполняется около 540мс, что ожидаемо. Попробуйте уменьшить задержку и посмотрите - ускорится или нет
Код:
Opt("TCPTimeout", 1)
 

InnI

AutoIT Гуру
Сообщения
4 486
Репутация
1 217
Firestarter
Похоже, были проблемы с этой опцией, окончательно исправленные в релизе 3.3.14.0
https://www.autoitscript.com/trac/autoit/ticket/2171
https://www.autoitscript.com/trac/autoit/ticket/1573
Попробуйте последнюю версию AutoIt.

А если нужна 3.3.8.1, как у вас указано в профиле, то пробуйте это: TCPConnectTimeout function
 
Верх