以下是实现上述功能的C代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 8888 void printPacketInfo(unsigned char* packet, int length) { printf("Received packet with length %d:\n", length); struct ether_header* ethHeader = (struct ether_header*)packet; printf("Source MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", ethHeader->ether_shost[0], ethHeader->ether_shost[1], ethHeader->ether_shost[2], ethHeader->ether_shost[3], ethHeader->ether_shost[4], ethHeader->ether_shost[5]); printf("Destination MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", ethHeader->ether_dhost[0], ethHeader->ether_dhost[1], ethHeader->ether_dhost[2], ethHeader->ether_dhost[3], ethHeader->ether_dhost[4], ethHeader->ether_dhost[5]); printf("Payload: "); for (int i = 14; i < length; i++) { printf("%02x ", packet[i]); } printf("\n"); } int main() { int sockfd; struct sockaddr_in serverAddr, clientAddr; struct ether_header ethHeader; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("Error in creating socket"); exit(EXIT_FAILURE); } bzero(&serverAddr, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); serverAddr.sin_port = htons(PORT); if (bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) { perror("Error in binding socket"); exit(EXIT_FAILURE); } printf("Server listening on port %d...\n", PORT); while (1) { char buffer[1500]; socklen_t addr_size = sizeof(clientAddr); recvfrom(sockfd, buffer, 1500, 0, (struct sockaddr*)&clientAddr, &addr_size); printPacketInfo(buffer, 1500); // Forward the received packet to the other network interface sendto(sockfd, buffer, 1500, 0, (struct sockaddr*)&clientAddr, addr_size); printf("Packet forwarded to the other network interface\n"); } close(sockfd); return 0; } ``` 这段代码创建了一个UDP服务器,监听端口8888。它接收从pc a 发送的数据,并将数据转发到 pc b 的另一个网卡。 上面的代码仅提供了一种实现方式,您可能需要根据实际情况进行适当调整。希望这可以帮助到您。 [2024-11-01 14:33:50 | AI写代码神器 | 1597点数解答]