2016-12-30 31 views
1

我編寫了一個程序來測試原始套接字sento函數,並且我發現當我編寫錯誤校驗和的tcp消息時,我在wireshark中觀察到了正確的校驗和,以下是我的程序:爲什麼原始套接字更改了我的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; 
} 

我發送校驗是ABC9 但我得到這個消息在Wireshark是 wireshark message

校驗是DEEA,這是正確的,我希望看到的校驗ABC9和不正確,但我不知道如何設置原始套接字不要改變我的校驗和。

謝謝!

+0

我不這麼認爲!這必須是未定義的行爲,很可能是由於緩衝區溢出/溢出。而且,這個'if(-1 == ioctl(sock_raw_fd,SIOCGIFINDEX,&ethreq))'只是非常難看。根本沒有用處,因爲編譯器會在需要時發出警告,在這種情況下,您無法意外地將'-1'分配給funcion調用。 –

+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-checksum: \t tx-checksum-ipv4:on [fixed] \t tx-checksum-ip-generic:off [固定]「 有沒有其他方法來改變這個選項。 – Ekko