2015-05-05 61 views
0

嗅出用C UDP數據包我有一個設置,看起來像這樣:離不開Wireshark的運行

Target ---- Switch ---- Switch ---- Windows computer 
          | 
        Linux computer 

所以我必須連接到它發送UDP信息包調試目的交換機的目標。通常情況下,這些數據包發送到Windows計算機進行分析,這是有效的。我現在也添加了一臺Linux計算機,以便將相同的數據傳輸到Linux和Windows上我已經設置了一個管理交換機來鏡像流量,當我查看Wireshark時,此工作正常。然後,我編寫了一個簡單的C應用程序來分析Linux計算機上的數據,如果Wireshark在同一時間運行,此軟件只能工作。否則,它不會從目標接收任何數據。爲什麼是這樣?

int main() 
{ 
    int saddr_size, data_size; 
    struct sockaddr saddr; 

    unsigned char *buffer = (unsigned char *) malloc(BUFFER_SIZE); 

    printf("Starting...\n"); 

    int sock_raw = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); 

    if (sock_raw < 0) 
    { 
     printf("Socket Error"); 
     return 1; 
    } 

    while (1) 
    { 
     saddr_size = sizeof saddr; 
     data_size = recvfrom(sock_raw, buffer, BUFFER_SIZE, 0, &saddr, (socklen_t*) &saddr_size); 
     if (data_size < 0) 
     { 
     printf("Recvfrom error , failed to get packets\n"); 
     return 1; 
     } 
     processPacket(buffer); 
    } 
    close(sock_raw); 
    printf("Finished"); 
    return 0; 
} 

來自目標的數據以類似於RTP的格式發送,併發往Windows計算機。

所以總結一下;爲什麼在沒有Wireshark運行的情況下,我的C應用程序中沒有收到目標數據?

回答

3

here相同,您需要將接口(不是我最初發布的套接字)放入混雜模式。 Wireshark做到這一點,這就是爲什麼Wireshark運行時你的代碼能夠正常工作。

+0

謝謝,啓用promisc模式幫助。 – Aircleaner

0

只是一個猜測:混雜模式沒有打開,以太網控制器丟棄不發給它的幀。

+0

謝謝,使promisc模式幫助。 – Aircleaner