2014-02-14 31 views
0

我有一個接收IP數據包的用戶空間應用程序。它需要確定數據包的類型是v4還是v6。假設「緩衝」包含包,我想到了兩種方法:確定數據包是否輸入IPv4或IPv6

  1. void *check_header(void *buffer) { 
    struct iphdr *iph = (struct iphdr *)buffer; 
    if (iph->version == IPV4) { 
        /* IPv4 */ 
    } else if (iph->version == IPV6) { 
        /* IPv6 */ 
    } 
    ...... 
    } 
    
    1. 找出機器的字節序。
    2. 相應地訪問數據包中的版本字段。

有沒有搞清楚包類型更好的辦法?

+0

是不是你的兩個方法基本一樣?只是在第一個時候,你並不真正在乎恩典。 –

回答

1

IP version字段是第一個字節的低4位。由於這是一個字節(而不是多字節)字段,因此機器的字節序應該是不相關的。但是,您將需要它用於多字節結構。