Два вопроса.
1.Не правильно определяет IP адрес.
Вот код:
void CFmOptions::GetAdaptersInfo()// Информация об адаптерах
{
struct TAdapter{
QString Name;
QString Desc;
QString Ip;
QString NetMask;
};
TAdapter AdapterInfo[10];
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t *handle;
int iAdaptersCount = 0;
pcap_if_t *alldevs;
pcap_if_t *d;
char s[15];
if (pcap_findalldevs(&alldevs, errbuf) == -1)
return;
for (d=alldevs; d; d=d->next)
{
if (d->addresses == NULL)
continue;
AdapterInfo[iAdaptersCount].Name = d->name;
if (d->description)
AdapterInfo[iAdaptersCount].Desc = d->description;
AdapterInfo[iAdaptersCount].Ip = "0.0.0.0";
AdapterInfo[iAdaptersCount].NetMask = "0.0.0.0";
if (d->addresses != NULL)
{
sprintf(s,"%d.%d.%d.%d",
(UCHAR)d->addresses->addr->sa_data[2],
(UCHAR)d->addresses->addr->sa_data[3],
(UCHAR)d->addresses->addr->sa_data[4],
(UCHAR)d->addresses->addr->sa_data[5]);
AdapterInfo[iAdaptersCount].Ip = s; // IP адрес карты
}
iAdaptersCount++;
}
pcap_freealldevs(alldevs);
}
У меня 2 сетевые карты. Определяет в принципе правильно - eth0, eth1. Но с IP адресами проблема. У первой карточки пишет 1.0.0.0, у второй 2.0.0.0.
В чем тут может быть дело?
2.В WinPCap под Windows есть библиотека Packet.dll. Она позволяет считать количество пропущенных сетевой картой пакетов (функция PacketGetStats).
Есть ли что-то подобное в билиотеке Libpcap?