人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統 > 網絡技術教程 > 詳細頁面

安全研究:Linux系統下的網絡監聽技術(2)

安全研究:Linux系統下的網絡監聽技術(2)

更新時間:2019-02-08 文章作者:未知 信息來源:網絡 閱讀次數:

網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。

  以太網上數據幀的監聽剖析

  以太網上的數據幀主要涉及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報頭:


[page_break]
  相應的數據結構如下

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


[page_break]
  這是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是緊急指針。


[page_break]  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;
  };



網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 金昌市| 石泉县| 辰溪县| 香河县| 瓦房店市| 大悟县| 山阴县| 类乌齐县| 长泰县| 石棉县| 于田县| 清镇市| 龙门县| 曲水县| 灵川县| 肥乡县| 宜州市| 丰城市| 韩城市| 白山市| 平顶山市| 都兰县| 西和县| 民丰县| 普洱| 凉山| 宽城| 泰和县| 东乡县| 无棣县| 利辛县| 邮箱| 兴安盟| 无极县| 锡林浩特市| 广灵县| 兴城市| 连山| 岳池县| 湖州市| 侯马市|