gpt4 book ai didi

c - 无法使用 tcpdump 捕获 IP 广播数据包

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:39 25 4
gpt4 key购买 nike

我正在使用示例 udp 客户端程序发送 IP 广播数据包,并尝试使用 tcpdump 捕获相同的数据包并使用以下示例命令

sudo tcpdump -n 源端口 1050sudo tcpdump -i em1 "端口 1050"

这是 ip route 的输出(修改了 IP 地址)

default via x.x.x.x dev em1  proto static
x.46.78.0/23 dev em1 proto kernel scope link src x.y.79.16 metric 1
x.y.0.0/16 dev p4p1.1102 proto kernel scope link src x.y.7.45 metric 6
x.y.0.0/16 dev p4p1.1103 proto kernel scope link src x.y.7.45 metric 6
x.y.0.0/24 dev p4p1.1100 proto kernel scope link src x.y.0.1 metric 6
x.y.1.0/24 dev prvn-bridge proto kernel scope link src x.y.1.10 metric 20
x.y.122.0/24 dev virbr0 proto kernel scope link src x.y.122.1
x.0.0.0/4 dev p4p1.1102 proto static
x.0.0.0/4 dev p4p1.1103 proto static

//Client code used for sending IP Broadcast packet (modified version of http://www.csee.usf.edu/~christen/tools/udpClient.c)

#define BSD // WIN for Winsock and BSD for BSD sockets

//----- Include files ---------------------------------------------------------
#include <stdio.h> // Needed for printf()
#include <string.h> // Needed for memcpy() and strcpy()
#ifdef WIN
#include <windows.h> // Needed for all Winsock stuff
#endif
#ifdef BSD
#include <sys/types.h> // Needed for sockets stuff
#include <netinet/in.h> // Needed for sockets stuff
#include <sys/socket.h> // Needed for sockets stuff
#include <arpa/inet.h> // Needed for sockets stuff
#include <fcntl.h> // Needed for sockets stuff
#include <netdb.h> // Needed for sockets stuff
#endif

//----- Defines ---------------------------------------------------------------
#define PORT_NUM 1050 // Port number used

//===== Main program ==========================================================
void main(void)
{
#ifdef WIN
WORD wVersionRequested = MAKEWORD(1,1); // Stuff for WSA functions
WSADATA wsaData; // Stuff for WSA functions
#endif
int client_s; // Client socket descriptor
struct sockaddr_in server_addr; // Server Internet address
int addr_len; // Internet address length
char out_buf[4096]; // Output buffer for data
char in_buf[4096]; // Input buffer for data
int retcode; // Return code
int iOptVal; // Socket option value
int iOptLen; // Socket option length
int count;

#ifdef WIN
// This stuff initializes winsock
WSAStartup(wVersionRequested, &wsaData);
#endif

// Create a socket
client_s = socket(AF_INET, SOCK_DGRAM, 0);
if (client_s < 0)
{
printf("*** ERROR - socket() failed \n");
exit(-1);
}

// Fill-in server socket's address information
server_addr.sin_family = AF_INET; // Address family to use
server_addr.sin_port = htons(PORT_NUM); // Port num to use
server_addr.sin_addr.s_addr = (INADDR_ANY); // Need this for Broadcast

// Set socket to use MAC-level broadcast
iOptVal = 1;
iOptLen = sizeof(int);
setsockopt(client_s, SOL_SOCKET, SO_BROADCAST, (char*)&iOptVal, iOptLen);

// Assign a message to buffer out_buf
strcpy(out_buf, "Test message from CLIENT to SERVER");

// Now send the message to server.
for (count = 0 ; count < 100; count++)
{
printf("Sending a broadcast packet\n");
retcode = sendto(client_s, out_buf, (strlen(out_buf) + 1), 0,
(struct sockaddr *)&server_addr, sizeof(server_addr));
if (retcode < 0)
{
printf("*** ERROR - sendto() failed \n");
exit(-1);
}
sleep(5);
}

#if 0
// Wait to receive a message
addr_len = sizeof(server_addr);
retcode = recvfrom(client_s, in_buf, sizeof(in_buf), 0,
(struct sockaddr *)&server_addr, &addr_len);
if (retcode < 0)
{
printf("*** ERROR - recvfrom() failed \n");
exit(-1);
}
#endif
// Output the received message
printf("Received from server: %s \n", in_buf);

// Close all open sockets
#ifdef WIN
retcode = closesocket(client_s);
if (retcode < 0)
{
printf("*** ERROR - closesocket() failed \n");
exit(-1);
}
#endif
#ifdef BSD
retcode = close(client_s);
if (retcode < 0)
{
printf("*** ERROR - close() failed \n");
exit(-1);
}
#endif

#ifdef WIN
// This stuff cleans-up winsock
WSACleanup();
#endif
}

但由于某种原因,我看不到数据包。有人可以帮我解决这个问题吗?

谢谢。

最佳答案

您需要使用 INADDR_BROADCAST 而不是 INADDR_ANY。

关于c - 无法使用 tcpdump 捕获 IP 广播数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com