#cpp #linux #сокет
Начал выкладывать свою библиотеку: https://github.com/mikelsv/opensource , возникла
проблема в примере mping.
Для получения ответов от пингуемого хоста нужно включить прослушивание интерфейса.
В коде по умолчанию используется интерфейс eth0, которого вполне может и не быть. Собственно
на VPS где проверяется работоспособность этого интерфейса нет, вследствие чего возникает
ошибка.
Текущая реализация: https://github.com/mikelsv/opensource/blob/master/msvcore/net/sniffer.h#L56
и https://github.com/mikelsv/opensource/blob/master/msvcore/net/sniffer.h#L96
unsigned char device[1024];
strcpy((char*)device, "eth0");
strcpy((char*)interface.ifr_name,(char*)device);
if(ioctl(sock,SIOCGIFFLAGS,&interface)<0){ printf("failed reading data for %s!\n",device);
return 1; }
Так как интерфейса eth0 в системе нет, вылетает ошибка "failed reading data for eth0".
Как получить имя интерфейса существующего интерфейса? Так, чтобы у интерфейса был
реальный ip. Как вариант, можно передавать в функцию локальный ip с которого послан
пинг, тогда как получить название интерфейса зная его ip?
Код старый, написан коряво, переписывать смысла нет, а работоспособность восстановить
хочется.
Ответы
Ответ 1
думаю, вам подойдёт функция getifaddrs. описание и пример применения смотрите командой $ man getifaddrs либо в интернетеОтвет 2
Утилита ifconfig возвращает список интерфейсов, их состояние и адреса на них. Вот тут пишут как получить тот же результат не вызывая стороннюю программу.Ответ 3
Можно посмотреть в файле конфигураций: sudo nano /etc/network/interfaces Или выполнить команду: ifconfig -a
Комментариев нет:
Отправить комментарий