这是我的第一个C应用程序,所以请原谅一些无知。出于速度的原因,我正在将基于Python的libpcap
应用程序移植到C上。我在理解如何从数据包中提取信息时遇到了问题。它作为u_char
来处理我的处理函数,并且可以从那里开始。在python中,我只需切分“字符串”并以这种方式提取我的信息,但我不知道如何继续。C指针和内存(PCAP和数据包处理)
例如,如何I(分别字节0-6和7-11)提取以太网帧中的目的地和源MAC地址。现在,我有:
void handle_sniffed(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) {
u_char *mac_dst = malloc(6*sizeof(u_char));
u_char *mac_src = malloc(6*sizeof(u_char));
memcpy(mac_dst, packet, 6);
memcpy(mac_src, packet+6, 6);
}
上午我正确地做这个,现在我怎么显示的MAC地址,例如使用printf
?
我只是捕获沼泽标准的以太网帧,这就是所有这个程序将不得不做的。我意识到我可以将它转换为结构体,对我来说这将是“简单”的出路(我相信这也是在C中完成它的聪明方式)。我正在遵循http://www.tcpdump.org/pcap.html上的说明,其中包括该演员。我想基本上做一个1:1的Python代码的端口,因为这意味着我必须在C中做更多的工作。我使用这种方法来真正将指针和指针算术嵌入我的头脑中。这是我以前从来没有能够包揽头脑的东西。 – axon 2012-02-15 22:09:16
哇,这是一些练习的核心方式 – 2012-02-15 22:19:59
这样做将cast-to-struct方式作为进行复杂内存访问的可接受方式吗?不只是在这种情况下,但大多数情况下? – axon 2012-02-16 03:27:18