LINUX.ORG.RU

сканер работающих машин


0

0

(исходники nmap'a изучал - но хер что понял)

пишу сканер работающих машин в локальной сети (мне нехер делать)

посылаю запрос на 80-й порт, и по результатам определяю - включена машина или нет.

смотрел как это делает nmap (простой пинг) (я с него идею 80-го скопировал) - он сразу на все машины сокеты открывает. причем если на машине стоит apache, рвет соединение.

вопрос: как его правильно рвать, это соединение. через netstat вижу висящий SYN запрос на машину, хотя close(socket) сделал. пытался shutdown(socket) - тоже нихрена, висит соединение.

и еще :) - как nmap открывает сразу много сокетов и шлет через них сразу - вроде fork он не использует, в системе висит всего один процесс, а сокетов - тьма.

может можно от ожидания ответа сокета отказаться, и начать открывать новый ? ума просто не приложу.

заранее спасибо.



> и еще :) - как nmap открывает сразу много сокетов и шлет через них
> сразу - вроде fork он не использует, в системе висит всего один
> процесс, а сокетов - тьма.

Это неблокирующие сокеты.

Мужик, давай бегом Стивенса читать. Есть на русском и недорого.
Честно - ты получишь ответы на многие вопросы и
сэкономишь дофига своего времени. Так что быстренько
на www.ozon.ru или там www.books.ru и искать:

У. Р. Стивенс
UNIX. Разработка сетевых приложений
Серия: Мастер-класс
Издательство: Питер, 2003 г.
ISBN 5-318-00535-7, 0-1349-0012-X

Уильям Стивенс
Unix. Взаимодействие процессов
Серия: Мастер-класс
Издательство: Питер, 2002 г.
ISBN 5-318-00534-9, 0-13-081081-9

У. Ричард Стивенс
Протоколы TCP/IP. Практическое руководство
Серия: В подлиннике
Издательство: BHV - Санкт - Петербург, 2003 г.
ISBN 5-7940-0093-7, 5-94157-300-6, 0-201-63346-9

anonymous
()

1) arp -a 2) ping -b network

3) написать клиенты и поставить их на машины, чтобы они слали пакет на сервер, который осуществляет контроль количества машин.

больше на ум ничего не пришло...

vilfred ☆☆
()
Ответ на: комментарий от anonymous

> а в электронном виде этих книг никто не видел, а то дорого как-то
> получается
>

1. Не обязательно покупать сразу все
2. Можно сброситься и покупать на нескольких человек
3. Мужик, это же вложение в твой прфессионализм, в твою
конкурентоспособность.

Да и какой нахер "дорого"? Вот оригинальные издания - те ействительно
немного дороговаты, баксов от 50 и выше. Так что 250-500 рублей это
вполне нормально. Ну придется вотки меньше выпить...

У меня есть Стивенс (и многие другие книги) на английском (тогда
русских еще не было) - и я _абсолютно_ не жалею о потраченных
деньгах.

anonymous
()

значит, что меня вот что волнует:

кодга я вызываю connect() на машину, которая выключена, моя прога ждет ответа от функции connect(). И если мне надо просканить 100 выключеных машин, то за счет ожидания результата все очень затянется.

nmap, блин - у него задержка всего на один connect при скане на 100 машин - такое впечатление что он fork или pthread_create делает.

при просмотре исходников вроде такого не заметил. может плохо смотрел, а может я чет не знаю ?

nial
() автор топика
Ответ на: комментарий от nial

да нет же!

#!/usr/local/bin/perl

sub FTP_Test
{
  my $ID = $_[0];
  my $IP = GetIPByName ($FTP_Host[$ID]);

  my $Sock;
  socket ($Sock, PF_INET, SOCK_STREAM, getprotobyname ("tcp"));
  my $sin = sockaddr_in (21, inet_aton ($IP));
  fcntl ($Sock, F_SETFL, O_NONBLOCK)  or die "fcntl: $!";;
  connect ($Sock, $sin);

  my $Data;
  sleep (2);
  recv ($Sock, $Data, 200, MSG_DONTWAIT);
  sleep (2);
  print $@."\n";
  if ( length ($Data) <= 1 )
    {return 0;}
  else
    {return 1;}
}

или

<?
for ( $i = 0; $i < count ($Ser); $i++ )
{
  $socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
  array_push ($Sock, $socket);

  socket_set_nonblock ($socket);
  @socket_connect ($socket, gethostbyname ($Ser[$i]), 21);
}

sleep (3);

for ( $i = 0; $i < count ($Ser); $i++ )
{
  $s = @socket_read ($Sock[$i], 222);
  $s = substr ($s, 0, 30);
  if ( $s != "" )
  {
............. и т.д.

theserg ★★★
()
Ответ на: комментарий от theserg

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

и твои посты про man socket и т.л считал плохими :) спасибо

nial
() автор топика

лучше всего было запустить gdb nmap, перед этим собрав соответственно :) я так и сделал... за день все освоил. особенно классная что-то типа getsockettcppingresults из targets.cc - такого я еще не видел.

ЗЫ: без gdb nmap я бы не справился. очень много ответов получил. советую.

nial
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.