欧美性猛交黑人xxxx,成人毛片一区二区三区,久久综合九色综合精品,男的把j放进女人下面视频免费

Linux下的網(wǎng)絡(luò)監(jiān)聽技術(shù)(2)

  • 發(fā)布于:2023-10-10
  • 192 人圍觀
 

      以太網(wǎng)上數(shù)據(jù)幀的監(jiān)聽剖析

  以太網(wǎng)上的數(shù)據(jù)幀主要涉及Tcp/ip協(xié)議,針對(duì)以下幾個(gè)協(xié)議的分析:IP,ARP,RARP,IPX,其中重點(diǎn)在于ip和 arp協(xié)議,這兩個(gè)協(xié)議是多數(shù)網(wǎng)絡(luò)協(xié)議的基礎(chǔ),因此把他們研究徹底,就對(duì)大多數(shù)的協(xié)議的原理和特性比較清楚了。 由于各種協(xié)議的數(shù)據(jù)幀個(gè)不相同,所以涉及很多的數(shù)據(jù)幀頭格式分析,接下來將一一描述。

  在linux 下監(jiān)聽網(wǎng)絡(luò),應(yīng)先設(shè)置網(wǎng)卡狀態(tài),使其處于雜混模式以便監(jiān)聽網(wǎng)絡(luò)上的所有數(shù)據(jù)幀。然后選擇用Linux socket 來截取數(shù)據(jù)幀,通過設(shè)置socket() 函數(shù)參數(shù)值,可以使socket截取未處理的網(wǎng)絡(luò)數(shù)據(jù)幀,關(guān)鍵是函數(shù)的參數(shù)設(shè)置,下面就是有關(guān)的程序部分:


  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 表示 截取數(shù)據(jù)幀的層次在物理層,既不作處理。

  Htons(0x0003)表示 截取的數(shù)據(jù)幀的類型為不確定,既接受所有的包。

  總的設(shè)定就是網(wǎng)卡上截取所有的數(shù)據(jù)幀。這樣就可以截取底層數(shù)據(jù)幀,因?yàn)榉祷氐膶⑹且粋€(gè)指向數(shù)據(jù)的指針,為了分析方便,我設(shè)置了一個(gè)基本的數(shù)據(jù)幀頭結(jié)構(gòu)。

  Struct etherpacket
  {struct ethhdr eth;
  struct iphdr ip;
  struct tcphdr tcp;
  char buff[8192];
  } ep;

 

  將返回的指針賦值給指向數(shù)據(jù)幀頭結(jié)構(gòu)的指針,然后對(duì)其進(jìn)行分析。以下是有關(guān)協(xié)議的報(bào)頭:ethhdr 這是以太網(wǎng)數(shù)據(jù)幀的mac報(bào)頭:

  --------------------------------------------------------
  |48bit 目的物理地址 | 48bit 源物理地址 | 16bit 協(xié)議地址|
  --------------------------------------------------------
  

  相應(yīng)的數(shù)據(jù)結(jié)構(gòu)如下

  struct ethhdr
  {
  unsigned char h_dest[ETH_ALEN];
  unsigned char h_source[ETH_ALEN];
  unsigned short h_proto;
  }

  其中h_dest[6]是48位的目標(biāo)地址的網(wǎng)卡物理地址,h_source [6] 是48位的源地址的物理網(wǎng)卡地址。H_proto是16位的以太網(wǎng)協(xié)議,其中主要有0x0800 ip,0x8035.X25,0x8137 ipx,0x8863-0x8864 pppoe(這是Linux的 ppp),0x0600 ether _loop_back ,0x0200-0x0201 pup等。Iphdr 這是ip協(xié)議的報(bào)頭:
  由此可以定義其結(jié)構(gòu)如下:

  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協(xié)議報(bào)頭,針對(duì)版本的不同它可以有不同的定義,我們國內(nèi)一般用BIG的定義,其中version 是ip的版本,protocol是ip的協(xié)議分類主要有0x06 tcp.0x11 udp,0x01 icmp,0x02 igmp等,saddr是32位的源ip地址,daddr是32位的目標(biāo)ip地址。
相應(yīng)的數(shù)據(jù)結(jié)構(gòu):

  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 協(xié)議報(bào)頭,其中ar_hrd 是硬件地址的格式,ar_pro協(xié)議地址的格式,ar_hln是硬件地址的長(zhǎng)度,ar_pln時(shí)協(xié)議地址的長(zhǎng)度,ar_op是arp協(xié)議的分類0x001是arp echo 0x0002 是 arp reply.接下來的分別是源地址的物理地址,源ip地址,目標(biāo)地址的物理地址,目標(biāo)ip地址。

  Tcphdr ip協(xié)議的tcp協(xié)議報(bào)頭

  以下是相應(yīng)數(shù)據(jù)結(jié)構(gòu):

  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協(xié)議的一部分與ip協(xié)議相同取BIG,其中source是源端口,dest 是目的端口,seq是s序,ack_seq是a序號(hào),其余的是tcp的連接標(biāo)志其中包括6個(gè)標(biāo)志:syn表示連接請(qǐng)求,urg 表示緊急信息,fin表示連接結(jié)束,ack表示連接應(yīng)答,psh表示推棧標(biāo)志,rst表示中斷連接。window是表示接受數(shù)據(jù)窗口大小,check是校驗(yàn)碼,urg ptr是緊急指針。

  Udphdr 這是udp協(xié)議報(bào)頭

  struct udphdr {
  u_int16_t source;
  u_int16_t dest;
  u_int16_t len;
  u_int16_t check;
  }
  

  這是Linux下ip協(xié)議中udp協(xié)議的一部分,結(jié)構(gòu)很明顯 source 源端口,dest目的端口,len udp 長(zhǎng)度,check 是校驗(yàn)碼。

  Icmphdr 這是ip協(xié)議的icmp協(xié)議的報(bào)頭

  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;
  };

萬企互聯(lián)
標(biāo)簽: