2016-12-30 9 views
1

rawソケットのsento関数をテストするプログラムを書いています。間違ったチェックサムでtcpメッセージを書くと、wiresharkで正しいチェックサムを観察しました。 :rawソケットが私のtcpチェックサムを変更した理由

int main() 
{ 
    int sock_raw_fd,len; 
    struct sockaddr_ll sll; 

    struct ifreq ethreq; 

    strncpy (ethreq.ifr_name, "eth0", (sizeof(ethreq.ifr_name) - 1)); 
    ethreq.ifr_name[sizeof(ethreq.ifr_name)-1] = '\0'; 
    sock_raw_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); 

    if(sock_raw_fd < 0){ 
     perror("socket"); 
     exit(1); 
    } 

    if(-1 == ioctl(sock_raw_fd, SIOCGIFINDEX, &ethreq)){ 
     perror("ioctl"); 
     close(sock_raw_fd); 
     exit(1); 
    } 

    bzero(&sll, sizeof(sll)); 
    sll.sll_ifindex = ethreq.ifr_ifindex; 

    unsigned char buf[size] = {0xF0,0xDE,0xF1,0x06,0x71,0x3A,0x00,0xE0,0x66,0xE2,0xEA,0xC0,0x08,0x00,0x45,0x00,0x05,0xDC,0x2B,0x5E,0x40,0x00,0x40,0x06,0x85,0xE9,0xC0,0xA8,0x01,0x0A,0xC0,0xA8,0x01,0x7A,0x09,0x79,0xD8,0xB7,0x27,0x6C,0x4C,0x2C,0xF5,0x9C,0xAB,0xC9,0x50,0x10,0x01,0x00,0xAB,0xC9,0x00,0x00,0x7C,0xC8,0xE8,0x89,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFD,0xFF,0xFD,0xFE,0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFE,0xFF,0xFD,0xFE,0xFF,0xFF,0xFC,0xFF,0xFF,0xFD,0xFF,0xFE,0xFE,0xFF,0xFD,0xFE,0xFF,0xFE,0xFC,0xFE,0xFE,0xFD,0xFE,0xFE,0xFD,0xFF,0xFE,0xFC,0xFD,0xFE,0xFD,0xFE,0xFE,0xFC,0xFF,0xFE,0xFC,0xFE,0xFE,0xFC,0xFD,0xFE,0xFB,0xFF,0xFE,0xFC,0xFF,0xFE,0xFC,0xFF,0xFE,0xFC,0xFF,0xFE,0xFC,0xFF,0xFE,0xFA,0xFE,0xFD,0xFB,0xFE,0xFC,0xFB,0xFF,0xFC,0xFA,0xFD,0xFE,0xFB,0xFE,0xFE,0xFA,0xFF,0xFD,0xFA,0xFE,0xFD,0xFA,0xFD,0xFE,0xF9,0xFF,0xFC,0xFB,0xFE,0xFC,0xFA,0xFD,0xFD,0xF9,0xFE,0xFE,0xFA,0xFE,0xFC,0xFA,0xFE,0xFD,0xF9,0xFE,0xFD,0xF8,0xFD,0xFC,0xF9,0xFF,0xFE,0xF9,0xFE,0xFD,0xF9,0xFE,0xFD,0xF8,0xFE,0xFD,0xF8,0xFE,0xFD,0xF9,0xFE,0xFD,0xF7,0xFE,0xFC,0xF8,0xFE,0xFB,0xF8,0xFE,0xFC,0xF8,0xFE,0xFB,0xF8,0xFE,0xFC,0xF8,0xFE,0xFC,0xF7,0xFE,0xFB,0xF6,0xFE,0xFD,0xF8,0xFE,0xFD,0xF7,0xFE,0xFC,0xF7,0xFE,0xFB,0xF6,0xFE,0xFB,0xF5,0xFE,0xFD,0xF7,0xFE,0xFC,0xF7,0xFD,0xFB,0xF7,0xFC,0xFC,0xF6,0xFE,0xFC,0xF4,0xFE,0xFC,0xF5,0xFD,0xFC,0xF5,0xFC,0xFC,0xF4,0xFE,0xFC,0xF6,0xFD,0xFB,0xF5,0xFC,0xFB,0xF4,0xFD,0xFB,0xF4,0xFE,0xFB,0xF5,0xFE,0xFB,0xF5,0xFE,0xFB,0xF4,0xFE,0xFB,0xF3,0xFE,0xFB,0xF4,0xFE,0xFB,0xF2,0xFE,0xFB,0xF3,0xFD,0xFB,0xF3,0xFC,0xFB,0xF3,0xFC,0xFB,0xF3,0xFD,0xFB,0xF2,0xFD,0xFB,0xF2,0xFC,0xFB,0xF2,0xFC,0xFB,0xF1,0xFE,0xFB,0xF2,0xFD,0xFB,0xF2,0xFC,0xFA,0xF2,0xFC,0xF9,0xF2,0xFE,0xFB,0xF0,0xFD,0xFA,0xF1,0xFC,0xF9,0xF0,0xFD,0xFA,0xEF,0xFD,0xFA,0xF0,0xFD,0xFA,0xF0,0xFD,0xFA,0xF0,0xFD,0xFA,0xF0,0xFE,0xFA,0xF0,0xFC,0xFA,0xEE,0xFD,0xFA,0xEF,0xFD,0xF9,0xEF,0xFD,0xF8,0xEF,0xFD,0xF9,0xEF,0xFD,0xF9,0xFD,0xF8,0xEA,0xFC,0xF8,0xEA,0xFB,0xF8,0xEA,0xFD,0xF8,0xE8,0xFC,0xF7,0xE9,0xFB,0xF6,0xE9,0xFB,0xF6,0xE9,0xFD,0xF8,0xE9,0xFC,0xF8,0xE9,0xFC,0xF7,0xE8,0xFC,0xF6,0xE8,0xFB,0xF7,0xE9,0xFC,0xF7,0xE7,0xFC,0xF7,0xE8,0xFC,0xF7,0xE7,0xFC,0xF7,0xE6,0xFC,0xF7,0xE7,0xFC,0xF7,0xE7,0xFC,0xF7,0xE6,0xFC,0xF7,0xE5,0xFC,0xF7,0xE7,0xFC,0xF7,0xE6,0xFC,0xF7,0xE6,0xFC,0xF6,0xE5,0xFC,0xF5,0xE4,0xFC,0xF6,0xE5,0xFC,0xF6,0xE5,0xFC,0xF6,0xE5,0xFC,0xF6,0xE5,0xFC,0xF6,0xE3,0xFC,0xF6,0xE4,0xFC,0xF6,0xE4,0xFC,0xF6,0xE4,0xFC,0xF4,0xE2,0xFB,0xF5,0xE3,0xFA,0xF6,0xE3,0xFB,0xF6,0xE2,0xFC,0xF6,0xE3,0xFA,0xF4,0xE1,0xFA,0xF5,0xE2,0xFB,0xF5,0xE3,0xFC,0xF4,0xE2,0xFC,0xF5,0xE0,0xFB,0xF5,0xE1,0xFA,0xF5,0xE1,0xFA,0xF5,0xE1,0xFC,0xF5,0xE1,0xFB,0xF4,0xE1,0xFB,0xF4,0xE0,0xFB,0xF5,0xDF,0xFB,0xF5,0xE0,0xFB,0xF5,0xDE,0xFA,0xF5,0xDF,0xFB,0xF5,0xDF,0xFC,0xF5,0xDF,0xFA,0xF3,0xDF,0xFB,0xF4,0xDE,0xFB,0xF3,0xDD,0xFB,0xF2,0xDE,0xFB,0xF3,0xDE,0xFB,0xF2,0xDE,0xFB,0xF3,0xDE,0xFB,0xF4,0xDD,0xFB,0xF4,0xDC,0xFB,0xF4,0xDD,0xFB,0xF4,0xDD,0xFB,0xF3,0xDC,0xFB,0xF2,0xDB,0xF9,0xF3,0xDC,0xFA,0xF3,0xDB,0xFA,0xF3,0xDA,0xF9,0xF3,0xDB,0xFA,0xF3,0xDA,0xFA,0xF3,0xDA,0xFA,0xF3,0xDA,0xFA,0xF3,0xDA,0xFA,0xF3,0xDA,0xC8,0xE8,0x89,0xC2,0xE6,0x7C,0x7A,0x92,0x4B,0x47,0x50,0x82,0x47,0x50,0x82,0x47,0x50,0x82,0x47,0x50,0x82,0x47,0x50,0x82,0x47,0x50,0x82,0x47,0x50,0x82,0x47,0x50,0x82,0x47,0x50,0x82,0x47,0x50,0x82,0x48,0x51,0x83,0x47,0x50,0x82,0x47,0x50,0x82,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x46,0x4F,0x81,0x48,0x4F,0x81,0x48,0x4F,0x81,0x48,0x4F,0x81,0x48,0x4F,0x81,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x48,0x4F,0x81,0x48,0x4F,0x81,0x48,0x4F,0x81,0x48,0x4F,0x81,0x48,0x4F,0x81,0x48,0x4F,0x81,0x48,0x4F,0x81,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x47,0x4E,0x80,0x49,0x4D,0x80,0x49,0x4D,0x80,0x48,0x4C,0x7F,0x48,0x4C,0x7F,0x49,0x4D,0x80,0x49,0x4D,0x80,0x48,0x4C,0x7F,0x48,0x4C,0x7F,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x46,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x48,0x4D,0x7E,0x47,0x4C,0x7D,0x47,0x4C,0x7D,0x47,0x4C,0x7D,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xF1,0xF9,0xF1,0xC2,0xE6,0x7C,0x7A,0x92,0x4B,0x4E,0x54,0x81,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4F,0x55,0x84,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4F,0x55,0x84,0x4F,0x55,0x84,0x4F,0x55,0x84,0x4F,0x55,0x84,0x4F,0x55,0x84,0x4F,0x55,0x84,0x4F,0x55,0x84,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4E,0x54,0x83,0x4F,0x55,0x84,0x4F,0x55,0x84,0x4F,0x55,0x84,0x4F,0x55,0x84,0x51,0x55,0x85,0x51,0x55,0x85,0x50,0x56,0x85,0x50,0x56,0x85,0x50,0x56,0x85,0x50,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4C,0x56,0x85,0x4C,0x56,0x85,0x4C,0x56,0x85,0x4C,0x56,0x85,0x4A,0x57,0x85,0x4A,0x57,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0x56,0x85,0x4E,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2,0xF2,      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; 

    len = sendto(sock_raw_fd, &buf[0], size, 0, (struct sockaddr*)&sll, sizeof(sll)); 

    printf("send succeed: %d bytes\n",len); 
    return 0; 
} 

iは送信チェックサムがABC9 ですが、私はWiresharkの中にこのメッセージがチェックサムがDEEAある wireshark message

ありました、そしてそれは正しいですが、私はチェックサムがABC9と正しくない見たいですしかし、私は生のソケットを設定する方法を私のチェックサムを変更しないでください。

ありがとうございました!

+0

と、私はそうは思いません正しいかどうかをチェックすることができます!これは、バッファオーバー/オーバーフローのために、おそらく未定義の動作でなければならない(MUST)。また、この 'if(-1 == ioctl(sock_raw_fd、SIOCGIFINDEX、&ethreq))'はちょうど非常に醜いです。まったく役に立たないのは、コンパイラが必要なときに警告するため、この場合、誤ってファンクションコールに '-1'を割り当てることはできません。 –

+0

あなたの返事をありがとう、私は言ったように、この関数呼び出しを変更しました。なぜチェックサムがABC9からDEEA – Ekko

答えて

1

wiresharkのダンプが送信側からではなく受信側のマシンからのものであると想定しています。これはおそらく、ネットワークカードがチェックサムのオフロードを行っているためです。 あなたはEthtoolを使用してその動作を無効にすることができます

ethtool -K eth0 tx-checksum-ipv4 off 
ethtool -K eth0 tx-checksum-ip-generic off 

設定が今

ethtool -k eth0 
+0

にチェンジされたのか知りたいのですが、 "ethtool -K eth0 tx-checksum-ipv4 off"を使うと、 "デバイス機能を変更できませんでした"、コマンド "ethtool -k eth0"の出力が "tx-checksumming:on \t tx-checksum-ipv4:on [固定] \t tx-checksum-ip-generic:off [固定] " は、このオプションを変更するための他の方法があります。 – Ekko