2012-11-28 52 views
4

我正在使用數據包嗅探器。 最大的問題是我的代碼只能在Backtrack 5 R3下完美工作,但在其他發行版中無法使用!事實上,在Ubuntu 12.10和ArchLinux上,當嗅探器獲得第一個數據包時,我遇到了分段錯誤(我得到「分段錯誤核心轉儲」)。起初,我認爲錯誤在於圖書館或編譯器,但經過一些測試後,我想我可以排除它們!情況是這樣的:爲什麼我的程序不適用於不同的Linux發行版?

  • 回溯5 R3使用的gcc 4.4.3和1.0.0的libpcap
  • Ubuntu的12.10使用的gcc 4.7.2和1.3.0 Libpcap的
  • ArchLinux的相同的Ubuntu

於是,我就降級拱與gcc 4.4.3èlibpcap的1.0.0,但我得到了同樣的錯誤。 編譯代碼時我有一些警告,但沒有什麼非常重要的,但它在回溯軌道下完美工作!這是一個很大的謎團。

這裏是造成該問題的代碼:

void packet_dump(unsigned char *arguments, const struct pcap_pkthdr *pcap_data, const unsigned char *packet) { 
    int packet_data_len, tcp_header_size=0, total_header_size; 
    unsigned char *packet_data; 
    const unsigned char *ip_src_dest; 
    const struct header_ip *ip_header; 

    //Calculate the value of variables 
    ip_src_dest = (packet+LUNGHEZZA_INTESTAZIONE_ETH); 
    ip_header = (const struct header_ip *)ip_src_dest; 
    total_header_size = LUNGHEZZA_INTESTAZIONE_ETH+sizeof(struct header_ip)+tcp_header_size; 
    packet_data = (unsigned char *)packet + total_header_size; 
    packet_data_len = pcap_data->len - total_header_size; 

    //THIS CAUSE THE PROBLEM (Solved removing inet_ntoa and converting it manually) 
    printf("[ %s ] ============> ", inet_ntoa(ip_header->source_addr_ip)); 
    printf("[ %s ] \n", inet_ntoa(ip_header->destination_addr_ip)); 


} 
+4

您是否調試了分段錯誤? GDB是你的朋友。 – Mark

+9

*編譯代碼時我有一些警告,但沒有什麼真正重要的* - 你肯定*關於這個嗎? –

+1

正如@馬克說做一個gdb來看看那裏的段錯誤發生 –

回答

0

我懷疑你的程序崩潰,因爲ip_header-> source_addr_ip點,你不能訪問內存。您應該能夠使用GDB來確定是否是這種情況。

相關問題