gpt4 book ai didi

c - 在c中接收原始以太网数据包

转载 作者:行者123 更新时间:2023-11-30 17:49:45 25 4
gpt4 key购买 nike

我正在编写两个程序来发送和接收原始以太网数据包。我可以发送数据包并且可以接收数据包,但是我的接收器有两个问题。

首先:所有数据包都是重复的,这意味着所有传入的数据包都会显示两次。它仅在 2 个虚拟网络接口(interface)上有连接。(例如 src tap0 mac 00:00:8F:00:00:02 -> dest tap1 mac 00:00:8F:00:00:03)

第二:网络中的所有数据包都是从我的程序接收的,但它应该从特定接口(interface)接收数据包。

信息:我在 VirtualBox 中使用 Ubuntu 12.04.01 LTS

这是我的接收器代码:

/*read while first char not * */
while(frame.data[0] != '*'){
length_in_byte = recvfrom(sock_desc, buffer, ETH_FRAME_LEN,0,NULL,NULL);
if(length_in_byte == -1){
error handling
}

frame.dest_mac[0] = buffer[0];
frame.dest_mac[1] = buffer[1];
frame.dest_mac[2] = buffer[2];
frame.dest_mac[3] = buffer[3];
frame.dest_mac[4] = buffer[4];
frame.dest_mac[5] = buffer[5];

frame.src_mac[0] = buffer[6];
frame.src_mac[1] = buffer[7];
frame.src_mac[2] = buffer[8];
frame.src_mac[3] = buffer[9];
frame.src_mac[4] = buffer[10];
frame.src_mac[5] = buffer[11];

for(dataRun = 14; dataRun < length_in_byte; dataRun++){
frame.data[dataRun-14] = buffer[dataRun];
}
/*print struct*/
printf("\n");
printf("src: %02x:%02x:%02x:%02x:%02x:%02x\t->\tdest: %02x:%02x:%02x:%02x:%02x:%02x\n",frame.src_mac[0],frame.src_mac[1],frame.src_mac[2],frame.src_mac[3],frame.src_mac[4],frame.src_mac[5],frame.dest_mac[0],frame.dest_mac[1],frame.dest_mac[2],frame.dest_mac[3],frame.dest_mac[4],frame.dest_mac[5]);
printf("Data: %s\n", frame.data);

}

终端输出:发送数据=测试

src: 00:00:8f:00:00:03  ->  dest: 00:00:8f:00:00:02
Data: test

src: 00:00:8f:00:00:03 -> dest: 00:00:8f:00:00:02
Data: test

发送数据=a

src: 00:00:8f:00:00:03  ->  dest: 00:00:8f:00:00:02
Data: a

src: 00:00:8f:00:00:03 -> dest: 00:00:8f:00:00:02
Data: a

src: 00:00:8f:00:00:03 -> dest: 33:33:00:00:00:fb
Data: `

src: 00:00:8f:00:00:03 -> dest: 33:33:00:00:00:fb
Data: `

最佳答案

对于第一个问题:

while 循环"while(frame.data[0] != '*') " 导致数据包重复。也许您还必须检查数据包是否分段

关于c - 在c中接收原始以太网数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695963/

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