jnd*_*dok 5 c pcap packet-sniffers
我试图创建自己的嗅探器(仅适用于有趣),我在Mac上工作.我正在使用libpcap,这是一个非常好的嗅探库.所以,我使用了这个简单的嗅探器,它嗅探了5个数据包:(用C语言编写)
#include <pcap.h>
#include "hacking.h"
void pcap_fatal(const char *failed_in, const char *errbuf) {
printf("Fatal Error in %s: %s\n", failed_in, errbuf);
exit(1);
}
int main() {
struct pcap_pkthdr header;
const u_char *packet;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;
int i;
device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);
printf("Sniffing on device %s\n", device);
pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if(pcap_handle == NULL)
pcap_fatal("pcap_open_live", errbuf);
for(i=0; i < 5; i++) {
packet = pcap_next(pcap_handle, &header);
printf("Got a %d byte packet\n", header.len);
dump(packet, header.len);
}
pcap_close(pcap_handle);
}
Run Code Online (Sandbox Code Playgroud)
如果你想知道,是的,我从一本书(黑客:剥削的艺术)中取出它并进行了一些修改.问题是,如果我在Linux上运行它,它运行完美,没有问题.但是,如果我在Mac上运行它,它不起作用,它不捕获任何数据包.
你们有人可以帮忙吗?提前致谢!
小智 1
如果您收到“pcap_lookupdev 中的致命错误”错误消息,那么问题就是 Sascha 所说的 - 您没有捕获数据包的权限。 如果您收到该消息,请尝试使用 运行程序sudo
,或者尝试将 /dev/bpf* 设备的所有权更改为您(您需要使用 来执行此操作sudo
)。但是,您说“它嗅探'en0'”,所以大概您这么说是因为它正在打印“嗅探设备en0”,在这种情况下pcap_lookupdev()
不会失败。
如果您收到“pcap_open_live 中的致命错误”,这也可能是权限问题,但您几乎肯定不会因为那里的权限而收到错误,因为pcap_lookupdev()
已经失败了。
如果您没有收到“致命错误”错误消息,正如 Petesh 指出的那样,问题可能是您指定了 0 作为超时。如果超时指定为 0,pcap_loop()
则 、pcap_dispatch()
、pcap_next()
、pcap_next_ex()
可以无限期等待,然后再向应用程序提供数据包;在某些平台上,例如Linux和Solaris,它不会无限期等待,但在其他平台上,例如*BSD和OS X,它可能无限期等待。尝试超时1000,即一秒;例如,这就是 tcpdump 的作用。
归档时间: |
|
查看次数: |
8620 次 |
最近记录: |