Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |
Вопросик есть 12.05.03 11:09 Число просмотров: 1245
Автор: PS <PS> Статус: Elderman
|
> $iaddr = inet_aton($host); > for ($i = 0; $i <= $#ports; $i++) > { > $paddr = sockaddr_in($ports[$i], $iaddr); > $connect = connect(SOCK, $paddr); if ($connect)
Перл автомтом переводит численные значения в сетевой вид ?
Это собственно вопрос.
Если нет, то тебе стоит вызвать С аналог ф-ии htons для порта. Иначе ты пытаешся законнестится непонятно к чему.
Теперь по поводу сервисов. Самый тупой и простой способ - список ;) Ты знаешь что на таком то порту такой то сервис... хехе... в большинстве случаев прокатит. Если нужна большая точность - попытайся с ними "поговорить" (и послушать ответ). Других методов нет.
Кстати твой метод сканирования конечно самый простой, но обладает как минимум двумя хорошими недостатками:
1. Очень медленный.
2. Ты светишся как неоновая лампочка в ночи.
Похорошему, сканер надо писать на raw сокетах, генерируя "хитрые" пакеты вручную. О таких методах есть много статей, если память не изменяет, то и на этом сайте.
|
|
<programming>
|
[Perl] Сканер портов 12.05.03 10:07
Автор: loki Статус: Незарегистрированный пользователь
|
Здравствуйте! У меня возникли проблемы, связанные с разработкой сканера портов на perl (исходный код ниже). Итак, проблема первая: сканер не находит все открытые на компьютере порты. Из трех открытых tcp-портов (smtp - 25, sunrpc - 111, X11 - 6000) он находит только один (smtp - 25). nmap (простым сканированием) нашел все три. Почему? Проблема вторая: не проблема, а вопрос. Как сделать так, чтобы мой сканер мог определять какой сервис находится на данном порту? Это были все вопросы. Принцип работы сканера таков: пользователь вводит имя хоста и порты для сканирования. Скрипт обрабатывает данные и начинает конектиться на все указанные порты. Есть коннект - порт открыт, нет - закрыт. Исходник:
#!/usr/bin/perl -w
use Socket;
print "Enter Host name:\n";
$host = <>;
print "Enter ports for TCP-scanning:\n";
$port = <>;
@ports = split(" ", $port);
socket (SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$iaddr = inet_aton($host);
for ($i = 0; $i <= $#ports; $i++)
{
$paddr = sockaddr_in($ports[$i], $iaddr);
$connect = connect(SOCK, $paddr); if ($connect)
{$ports[$i] = "$ports[$i] - open\n"}
else
{$ports[$i] = "$ports[$i] - close\n"
}
}
for ($i = 0; $i <= $#ports; $i++) { print "$ports[$i]\n"; }
print "Press Any Key To Exit";
<>;
|
 |
Вопросик есть 12.05.03 11:09
Автор: PS <PS> Статус: Elderman
|
> $iaddr = inet_aton($host); > for ($i = 0; $i <= $#ports; $i++) > { > $paddr = sockaddr_in($ports[$i], $iaddr); > $connect = connect(SOCK, $paddr); if ($connect)
Перл автомтом переводит численные значения в сетевой вид ?
Это собственно вопрос.
Если нет, то тебе стоит вызвать С аналог ф-ии htons для порта. Иначе ты пытаешся законнестится непонятно к чему.
Теперь по поводу сервисов. Самый тупой и простой способ - список ;) Ты знаешь что на таком то порту такой то сервис... хехе... в большинстве случаев прокатит. Если нужна большая точность - попытайся с ними "поговорить" (и послушать ответ). Других методов нет.
Кстати твой метод сканирования конечно самый простой, но обладает как минимум двумя хорошими недостатками:
1. Очень медленный.
2. Ты светишся как неоновая лампочка в ночи.
Похорошему, сканер надо писать на raw сокетах, генерируя "хитрые" пакеты вручную. О таких методах есть много статей, если память не изменяет, то и на этом сайте.
|
 |  |
[Perl] Новые вопросы 12.05.03 17:26
Автор: loki Статус: Незарегистрированный пользователь
|
Спасибо за ответы! Тут у меня правда новые вопросы возникли:
>Перл автомтом переводит численные значения в сетевой вид ?
Вообще-то я думал, что да=)) Это значит, что мой скрипт не
работает?=((
>Если нет, то тебе стоит вызвать С аналог ф-ии htons для порта.
Это вот так что ли:
$iaddr = inet_aton($host);
for ($i = 0; $i <= $#ports; $i++)
{
$paddr = sockaddr_in(htons($ports[$i]), $iaddr);
$connect = connect(SOCK, $paddr);
if ($connect)
>Кстати твой метод сканирования конечно самый простой, но
>обладает как минимум двумя хорошими недостатками:
>1. Очень медленный.
>2. Ты светишся как неоновая лампочка в ночи.
Не совсем понимаю термин "шороший недостаток"=)) и тем не менее
можно ли этих недостатков избежать не используя raw сокеты? Если
да, то как?
И ещё вопрос: кроме указанной ошибки вы не заметили других багов,
недочетов, лишних строк кода и т.п?
Если вас не затруднит, ответьте, буду вам очень признателен!!!
з.ы.
>О таких методах есть много статей, если память не изменяет, то и
>на этом сайте.
На этом сайте не нашел!!! У вас линка случайно не найдется?
|
 |  |  |
[Perl] Новые вопросы 14.05.03 23:09
Автор: izlam Статус: Незарегистрированный пользователь
|
Если уж юзаешь Socket, perldoc по нему сильно поможет :)
> >1. Очень медленный. > >2. Ты светишся как неоновая лампочка в ночи. > Не совсем понимаю термин "шороший недостаток"=)) и тем не > менее > можно ли этих недостатков избежать не используя raw сокеты? raw сокеты помогут в случае с 2. В 1-м же случае видимо имелся ввиду неблокирующий IO, или fork-и, читай perldoc -f select perldoc -f fork
> Если да, то как? Гляди perldoc Net::RawIP (только поставь его сначала)
|
|
|