0

生のイーサネット パケットを送受信するための 2 つのプログラムを作成しています。パケットの送信と受信はできますが、受信機に 2 つの問題があります。

最初: すべてのパケットが複製されます。これは、すべての受信パケットが 2 回表示されることを意味します。2 つの仮想ネットワーク インターフェイスでの接続のみです。

2 番目: ネットワーク内のすべてのパケットはプログラムから受信されますが、特定のインターフェイスからパケットを受信する必要があります。

情報: 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);

}

ターミナル出力: send data = test

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: `
4

2 に答える 2

0

重複の問題の解決策を見つけました。これは私のプログラムのソース コードではありません。

問題は、仮想イーサネット デバイスからの接続でした。接続方法を、tap0 から tap1 に変更しました。

私はまだ使用していvde_switchます。問題 2 では、フィルターを見つける必要があります。

助けてくれてどうもありがとう

于 2013-07-19T07:58:04.610 に答える
0

最初の問題:

while ループ" while(frame.data[0] != '*') "はパケットの重複を引き起こします。パケットが断片化されているかどうかも確認する必要があるかもしれません

于 2013-07-17T10:14:04.163 に答える