嗅出用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應用程序中沒有收到目標數據?
謝謝,啓用promisc模式幫助。 – Aircleaner