Linux系統下的網路監聽技術(2)(轉)
乙太網上資料幀的監聽剖析
乙太網上的資料幀主要涉及Tcp/ip協議,針對以下幾個協議的分析:IP,ARP,RARP,IPX,其中重點在於ip和 arp協議,這兩個協議是多數網路協議的基礎,因此把他們研究徹底,就對大多數的協議的原理和特性比較清楚了。由於各種協議的資料幀個不相同,所以涉及很多的資料幀頭格式分析,接下來將一一描述。
在linux 下監聽網路,應先設定網路卡狀態,使其處於雜混模式以便監聽網路上的所有資料幀。然後選擇用Linux socket 來擷取資料幀,透過設定socket() 函式引數值,可以使socket擷取未處理的網路資料幀,關鍵是函式的引數設定,下面就是有關的程式部分:
if ( ( fd=socket (AF_INET, SOCK_PACKET,htons(0x0003)))<0) {perror (“can get SOCK_PACKET socket ”); exit(0); }
ぷぷAF_INET=2 表示 internet ip protocol
ぷぷSOCK_PACKET=10 表示 擷取資料幀的層次在物理層,既不作處理。
ぷぷHtons(0x0003)表示 擷取的資料幀的型別為不確定,既接受所有的包。
總的設定就是網路卡上擷取所有的資料幀。這樣就可以擷取底層資料幀,因為返回的將是一個指向資料的指標,為了分析方便,我設定了一個基本的資料幀頭結構。
Struct etherpacket {struct ethhdr eth; struct iphdr ip; struct tcphdr tcp; char buff[8192]; } ep;
將返回的指標賦值給指向資料幀頭結構的指標,然後對其進行分析。以下是有關協議的報頭:ethhdr 這是乙太網資料幀的mac報頭:
--------------------------------------------------------
|48bit 目的實體地址 | 48bit 源實體地址 | 16bit 協議地址|
--------------------------------------------------------
相應的資料結構如下
struct ethhdr { unsigned char h_dest[ETH_ALEN]; unsigned char h_source[ETH_ALEN]; unsigned short h_proto; }
其中h_dest[6]是48位的目標地址的網路卡實體地址,h_source [6] 是48位的源地址的物理網路卡地址。H_proto是16位的乙太網協議,其中主要有0x0800 ip,0x8035.X25,0x8137 ipx,0x8863-0x8864 pppoe(這是Linux的 ppp),0x0600 ether _loop_back ,0x0200-0x0201 pup等。Iphdr 這是ip協議的報頭:
由此可以定義其結構如下:
struct iphdr { #elif defined (_LITTLE_ENDIAN_BITFIELD) _u8 version :4, #elif defined (_BIG_ENDIAN_BITFIELD) _u8 version:4, ihl:4; #else #error "Please fix" #endif _u8 tos; _16 tot_len; _u16 id; _u16 frag_off; _u8 ttl; _u8 protocol; _u16 check; _u32 saddr; _u32 daddr; };
這是Linux 的ip協議報頭,針對版本的不同它可以有不同的定義,我們國內一般用BIG的定義,其中version 是ip的版本,protocol是ip的協議分類主要有0x06 tcp.0x11 udp,0x01 icmp,0x02 igmp等,saddr是32位的源ip地址,daddr是32位的目標ip地址。
相應的資料結構:
struct arphdr { unsigned short int ar_hrd; unsigned short int ar_pro; unsigned char ar_hln; unsigned char ar_pln; unsigned short int ar_op; #if 0 unsigned char _ar_sha[ETH_ALEN]; unsigned char _ar_sip[4]; unsigned char _ar_tha[ETH_ALEN]; unsigned char _ar_tip[4]; #end if };
這是linux 的arp 協議報頭,其中ar_hrd 是硬體地址的格式,ar_pro協議地址的格式,ar_hln是硬體地址的長度,ar_pln時協議地址的長度,ar_op是arp協議的分類0x001是arp echo 0x0002 是 arp reply.接下來的分別是源地址的實體地址,源ip地址,目標地址的實體地址,目標ip地址。
Tcphdr ip協議的tcp協議報頭
以下是相應資料結構:
struct tcphdr { u_int16_t source; u_int16_t dest; u_int32_t seq; u_int32_t ack_seq; # if _BYTE_ORDER == _LITTLE _ENDIAN u_int16_t resl:4; u_int16_t doff:4; u_int16_t fin:1; u_int16_t syn:1; u_int16_t rst:1; u_int16_t psh:1; u_int16_t ack:1; u_int16_t urg:1; u_int16_t res2:2; #elif _BYTE _ORDER == _BIG _ENDIAN u_int16_t doff:4; u_int16_t res1:4; u_int16_t res2:2; u_int16_t urg:1; u_int16_t ack:1; u_int16_t psh:1; u_int16_t rst:1; u_int16_t syn:1; u_int16_t fin:1; #else #error "Adjust your defines" #endif u_int16_t window; u_int16_t check; u_int16_t urg_ptr; };
這是Linux 下tcp協議的一部分與ip協議相同取BIG,其中source是源埠,dest 是目的埠,seq是s序,ack_seq是a序號,其餘的是tcp的連線標誌其中包括6個標誌:syn表示連線請求,urg 表示緊急資訊,fin表示連線結束,ack表示連線應答,psh表示推棧標誌,rst表示中斷連線。window是表示接受資料視窗大小,check是校驗碼,urg ptr是緊急指標。
Udphdr 這是udp協議報頭
struct udphdr { u_int16_t source; u_int16_t dest; u_int16_t len; u_int16_t check; }
這是Linux下ip協議中udp協議的一部分,結構很明顯 source 源埠,dest目的埠,len udp 長度,check 是校驗碼。
Icmphdr 這是ip協議的icmp協議的報頭
struct icmphdr { u_int8_t type; u_int8_t code; u_int16_t checksum; union { struct { u_int16_t id; u_int16_t sequence; } echo; u_int32_t gateway; struct { u_int16_t_unused; u_int16_t mtu; } frag; } un; };
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-940285/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux系統下的網路監聽技術(1)(轉)Linux
- 隔牆有耳 Linux系統下的網路監聽技術(轉)Linux
- 網路監聽技術
- 簡單配置Linux系統下的網路鄰居Samba(轉)LinuxSamba
- Linux系統 反病毒技術(轉)Linux
- Linux系統下網路配置Linux
- 網路為鄰—P2P網站監控技術網站
- Win XP系統無線網路技術完全詳解(轉)
- 6、oracle網路(監聽)Oracle
- Linux系統網路詳解(轉)Linux
- Linux系統行為新型實時監控技術Linux
- Javascript技術實現真正的網上試聽 (轉)JavaScript
- windows系統port監聽Windows
- 安卓監聽網路變化安卓
- Linux下NFS網路檔案系統設定及管理(轉)LinuxNFS
- 戴爾技術總監:虛擬技術將解放Linux(轉)Linux
- 網路欺騙技術 (轉)
- SCO Unix系統下網路印表機的使用(轉)
- 網際網路級監控系統必備-時序資料庫之Influxdb技術資料庫UX
- 配置Oracle資料庫和監聽隨Linux系統自啟動(轉)Oracle資料庫Linux
- 網路安全netstat監聽網路狀態。
- Linux 作業系統技術使用總結 (轉)Linux作業系統
- Linux虛擬網路技術Linux
- iOS AFN監聽網路狀態iOS
- 你可能沒聽過的10個網際網路技術的發明人
- NAVGateway技術:網路安全的新理念(轉)Gateway
- 監控Linux系統下的host和serviceLinux
- Linux系統下常用的3種網路測速工具!Linux
- (轉)使用 Nmon 監控 Linux 的系統效能Linux
- iOS 使用 Reachability 監聽網路狀態iOS
- 一個Oracle監聽問題的網路排查Oracle
- Linux作業系統網路應用解疑(轉)Linux作業系統
- linux系統備份方案--ghost網路篇(轉)Linux
- Linux 系統管理(下)(轉)Linux
- 網路分流器-網路分流器-網路流量監控技術及其方法
- Windows XP SP2作業系統下網路非完全斷流的再分析(轉)Windows作業系統
- 無線技術在Linux作業系統中的應用(轉)Linux作業系統
- Linux系統在儲存技術中的幾項應用(轉)Linux