這是我的第一個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