В каком файле и номере строки определена pcap_findalldevs ()? - PullRequest
0 голосов
/ 07 сентября 2011

Для какого файла и номера строки определена pcap_findalldevs ()? Я ищу в источнике libpcap место, где определена pcap_findalldevs (). Я нашел прототип в pcap.h, но где определена полная функциональность?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Давайте посмотрим:

# git clone git://git.debian.org/git/users/rfrancoise/libpcap.git
Cloning into libpcap...
[snap]
# grep -ri pcap_findalldevs libpcap |grep '{'
libpcap/fad-sita.c:int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf) {

Кажется, мой счастливый день!

Вот полный исходный код этой функции:

int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf) {
        *alldevsp = 0;
        strcpy(errbuf, "");
        if (acn_parse_hosts_file(errbuf))
                {
                return -1;
                }
        if (acn_findalldevs(errbuf))
                {
                return -1;
                }
        *alldevsp = acn_if_list;
        acn_if_list = 0;    

        return 0;
}

Тогда ответ на ваш вопросis: fad-sita.c !

0 голосов
/ 19 октября 2011

Он определен в нескольких местах, потому что способ его выполнения зависит от операционной системы, в которой вы работаете.В Windows с WinPcap это определено в fad-win32.c;на UN * X, которые имеют getifaddrs(), это определено в fad-getad.c;в Solaris 8 или более поздней версии он определен в fad-glifc.c;на других UN * X, которые поддерживают захват пакетов на локальных интерфейсах, это определено в fad-gifc.c;в UN * X, которые вообще не поддерживают захват пакетов, он определен (чтобы не возвращать интерфейсы) в fad-null.c;и если тот, кто настроил и собрал libpcap, сконфигурировал его в поддержку захвата с удаленных устройств, предоставляемых SITA , он определен в fad-sita.c.

(Да, другой ответ неправильный;им не следовало предполагать, что те из нас, кто пишет код в libpcap, любят ставить открывающую фигурную скобку функции в той же строке, что и имя функции - я этого не делаю и не буду.)

...