在?中定义的pcap_findalldevs()是什么文件和行号?我在libpcap源代码中查找定义了pcap_findalldevs()的地方。我在pcap.h中找到了原型,但是在哪里定义了完整的功能?
答案 0 :(得分:2)
让我们看看:
# 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;
}
然后,你的问题的答案是: fad-sita.c !
答案 1 :(得分:0)
它在几个地方定义,因为它的完成方式取决于您运行的操作系统。在带有WinPcap的Windows上,它在fad-win32.c
中定义;在具有getifaddrs()
的UN * Xes上,它在fad-getad.c
中定义;在Solaris 8或更高版本中,它在fad-glifc.c
中定义;在支持本地接口上的数据包捕获的其他UN * Xes上,它在fad-gifc.c
中定义;在完全不支持数据包捕获的UN * Xes上,它在fad-null.c
中被定义(不返回任何接口);并且,如果配置和构建libpcap的任何人碰巧配置为支持从SITA提供的远程设备捕获,则它在fad-sita.c
中定义。
(是的,另一个答案是错误的;他们不应该假设我们这些在libpcap中编写代码的人都喜欢将函数的开头花括号放在与函数名称相同的行上 - 我不要t,而不会,那样做。)