| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Помогите с программой (работа с локальной сетью) |
| Автор: Игорь007 17.5.2008, 21:48 |
| Всем привет. До этого вроде с С (по учебной программе) справлялся, но сейчас дали задание, даже не знаю с какой стороны подойти Нужно обзвонить локальную сеть, после чего вывести отсортированный список компьютеров по времени отзыва. С сортировкой списка понятно, но как взять список компьютеров и время отзыва? Под линухой (Mandriva) на С (хотя можно и Cpp). |
| Автор: Artemon 18.5.2008, 09:19 |
| Посылаем пинг на все адреса сети, которые откликнулись - запоминаем, затем пытаемся получить имя ПК по IP. |
| Автор: Игорь007 18.5.2008, 14:02 |
| А откуда адреса сети взять? |
| Автор: GrayCardinal 18.5.2008, 15:52 | ||
| Игорь007, Берешь твой IP, берешь маску, накладываешь одно на другое, получаешь адреса сети. Ну или типа того. К примеру :
Здесь компы сети - от 192.168.111.1 до 192.168.111.254 Каждый можно, в принципе, пингануть. Я бы сделал тупо коннектом к какому-нибудь "стандартному" порту. (nmap в руки). В данном случае по коду возврата connect (2) можно определить есть хост или нету. Второй вариант - широковещательная UDP на порт, к примеру 7 (echo) (хотя он может и не работать). Т.е. включаем бкаст на UDP сокет и отправляем UDP по адресу (в означенном случае 192.168.111.255 (bcast) )ну и ждем ответа. Третий вариант. Самый тупой - поставить smbclient и делать $ nmblookup "*" - можно получить сразу все IP сети... Вообще ещё вариантов - дофига |
| Автор: Graf Zeppelin 18.5.2008, 15:52 |
| Широковещательный можешь взять. Для IPv4 - 255.255.255.255 |
| Автор: Игорь007 18.5.2008, 16:19 |
| GrayCardinal, спасибо большое, буду пробовать (вариант с ifconfig eth0 по-моему оптимальный). А есть какой-нибудь небольшой мануал по работе в Си с ping'ом? |
| Автор: MAKCim 18.5.2008, 16:27 |
ото плохо, т. к всегда есть вероятность, что ifconfig в системе отсутствует стандартный и переносимый вариант - это использование ioctl() + SIOCGIFCONF man ping man 3 system |
| Автор: GrayCardinal 18.5.2008, 16:41 | ||
Ты думаешь ему дадут рута ? Ы LOL |
| Автор: MAKCim 18.5.2008, 16:50 | ||
извини, но ping тоже от рута работает эта классическая задача на использование ICMP все остальные варианты не стопроцентные Игорь007, если трахаться не хочешь, то
|
| Автор: Игорь007 18.5.2008, 17:43 | ||
MAKCim, и тебе спасибо.
Там, где буду сдавать, он есть. С С++ пока дел не имел, поэтому буду трахаться=) За код сенкс, в крайнем случае им воспользуюсь. |
| Автор: GrayCardinal 18.5.2008, 18:26 |
| MAKCim, У пинга сюид рут стоит. |
| Автор: Игорь007 18.5.2008, 21:39 |
| Прогресс небольшой есть. Теперь проблема - как взять результаты пинга? system(ping ...) выдаёт нулевое значение. |
| Автор: MAKCim 19.5.2008, 08:57 | ||||
и что? кстати, для создания raw-сокетов рут не обязателен достаточно CAP_NET_RAW Добавлено через 3 минуты и 49 секунд
|
| Автор: GrayCardinal 19.5.2008, 11:05 |
| MAKCim, А то что не получится у него рав сокеты использовать Игорь007, Заюзай popen(3). С него читаешь первые две строчки пинга. $ ping -c 1 <IP> Там и ttl и время |
| Автор: MAKCim 19.5.2008, 11:12 |
если уж так рута жалко, то тогда только ping но это неправильно... |
| Автор: GrayCardinal 19.5.2008, 11:14 |
| MAKCim, Хочу заметить что был предложен не один вариант, который с пингом |
| Автор: MAKCim 19.5.2008, 11:48 | ||
а все остальные не стопроцентные хост может быть подключен к сети, но при этом не иметь запущенных серверов (в т. ч netBIOS) |
| Автор: GrayCardinal 19.5.2008, 18:23 |
| MAKCim, О чём спорим ? |
| Автор: MAKCim 19.5.2008, 18:58 |
о путях решения задачи и о том, какие из них применять |