Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с программой (работа с локальной сетью) 
:(
    Опции темы
Игорь007
Дата 17.5.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



Всем привет.
До этого вроде с С (по учебной программе) справлялся, но сейчас дали задание, даже не знаю с какой стороны подойти  
Нужно обзвонить локальную сеть, после чего вывести отсортированный список компьютеров по времени отзыва. С сортировкой списка понятно, но как взять список компьютеров и время отзыва? 
Под линухой (Mandriva) на С (хотя можно и Cpp).
PM MAIL   Вверх
Artemon
Дата 18.5.2008, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Посылаем пинг на все адреса сети, которые откликнулись - запоминаем, затем пытаемся получить имя ПК по IP.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Игорь007
Дата 18.5.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



А откуда адреса сети взять?
PM MAIL   Вверх
GrayCardinal
Дата 18.5.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Игорь007
Берешь твой IP, берешь маску, накладываешь одно на другое, получаешь адреса сети. Ну или типа того.  
К примеру :
Цитата

debian:/home/oleg# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:18:F3:CE:BE:3B
          inet addr:192.168.111.2  Bcast:192.168.111.255  Mask:255.255.255.0
          inet6 addr: fe80::218:f3ff:fece:be3b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Здесь компы сети - от 192.168.111.1 до 192.168.111.254
Каждый можно, в принципе, пингануть. Я бы сделал тупо коннектом к какому-нибудь "стандартному" порту. (nmap в руки). В данном случае по коду возврата connect (2) можно определить есть хост или нету.

Второй вариант - широковещательная UDP на порт, к примеру 7 (echo) (хотя  он может и не работать).
Т.е. включаем бкаст на UDP  сокет и отправляем UDP по адресу (в означенном случае 192.168.111.255 (bcast) )ну и ждем ответа.

Третий вариант. Самый тупой - поставить smbclient и делать
$ nmblookup "*"
- можно получить сразу все  IP сети...  Вообще ещё вариантов - дофига smile Если не один означенный не подойдет, придумаем новый smile



--------------------
PM MAIL WWW   Вверх
Graf Zeppelin
Дата 18.5.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 28.3.2004

Репутация: нет
Всего: 1



Широковещательный можешь взять. Для IPv4 - 255.255.255.255
--------------------
Jah, help me!
PM MAIL   Вверх
MAKCim
Дата 18.5.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



GrayCardinal
Цитата(GrayCardinal @  18.5.2008,  15:52 Найти цитируемый пост)
Каждый можно, в принципе, пингануть. Я бы сделал тупо коннектом к какому-нибудь "стандартному" порту. (nmap в руки). В данном случае по коду возврата connect (2) можно определить есть хост или нету.

Второй вариант - широковещательная UDP на порт, к примеру 7 (echo) (хотя  он может и не работать).
Т.е. включаем бкаст на UDP  сокет и отправляем UDP по адресу (в означенном случае 192.168.111.255 (bcast) )ну и ждем ответа.

Третий вариант. Самый тупой - поставить smbclient и делать
$ nmblookup "*"

все это плохо
лучший вариант
ICMP echo requests + raw sockets + ioctl() для определения адреса сети  smile 

Это сообщение отредактировал(а) MAKCim - 18.5.2008, 16:14


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Игорь007
Дата 18.5.2008, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



GrayCardinal, спасибо большое, буду пробовать (вариант с ifconfig eth0 по-моему оптимальный).
А есть какой-нибудь небольшой мануал по работе в Си с ping'ом?
PM MAIL   Вверх
MAKCim
Дата 18.5.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Игорь007 @  18.5.2008,  16:19 Найти цитируемый пост)
вариант с ifconfig eth0 по-моему оптимальный

ото плохо, т. к всегда есть вероятность, что ifconfig в системе отсутствует
стандартный и переносимый вариант - это использование ioctl() + SIOCGIFCONF
Цитата(Игорь007 @  18.5.2008,  16:19 Найти цитируемый пост)
А есть какой-нибудь небольшой мануал по работе в Си с ping'ом? 

man ping
man 3 system


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 18.5.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Цитата

ICMP echo requests + raw sockets + ioctl() для определения адреса сети  

Ты думаешь ему дадут рута ? Ы LOL


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 18.5.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(GrayCardinal @  18.5.2008,  16:41 Найти цитируемый пост)
Ты думаешь ему дадут рута ? Ы LOL 

извини, но ping тоже от рута работает  smile 
эта классическая задача на использование ICMP
все остальные варианты не стопроцентные


Игорь007
если трахаться не хочешь, то
Код

#define REGEXP "Bcast"

char buffer[256];
...
char * interface;
...
sprintf(buffer, "ping -b `ifconfig %s | grep \"%s\" | cut -d ':' -f 3 | cut -d ' ' -f 1`", interface, REGEXP);
system(buffer);

 smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Игорь007
Дата 18.5.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



MAKCim, и тебе спасибо.
Цитата

ото плохо, т. к всегда есть вероятность, что ifconfig в системе отсутствует
 
Там, где буду сдавать, он есть. 
С С++ пока дел не имел, поэтому буду трахаться=) За код сенкс, в крайнем случае им воспользуюсь.
PM MAIL   Вверх
GrayCardinal
Дата 18.5.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



MAKCim
У пинга сюид рут стоит.


--------------------
PM MAIL WWW   Вверх
Игорь007
Дата 18.5.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



Прогресс небольшой есть.
Теперь проблема - как взять результаты пинга? system(ping ...) выдаёт нулевое значение.
PM MAIL   Вверх
MAKCim
Дата 19.5.2008, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(GrayCardinal @  18.5.2008,  18:26 Найти цитируемый пост)
У пинга сюид рут стоит. 

и что?  smile 
кстати, для создания raw-сокетов рут не обязателен
достаточно CAP_NET_RAW

Добавлено через 3 минуты и 49 секунд
Цитата(Игорь007 @  18.5.2008,  21:39 Найти цитируемый пост)
Теперь проблема - как взять результаты пинга? system(ping ...) выдаёт нулевое значение. 

Код

#define REGEXP "Bcast"
char buffer[1024];
...
char * interface;
...
sprintf(buffer, "ping -b `ifconfig %s | grep \"%s\" | cut -d ':' -f 3 | cut -d ' ' -f 1`", interface, REGEXP);
FILE * fs = popen(buffer, "r");
while (fgets(buffer, 1024, fs) > 0)
    puts(buffer);
pclose(fs);



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 19.5.2008, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



MAKCim
А то что не получится у него рав сокеты использовать  smile

Игорь007
Заюзай popen(3). С него читаешь первые две строчки пинга.
$ ping -c 1 <IP>
Там и ttl и время smile



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1007 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.