歡迎您光臨本站 註冊首頁

Linux下的網路監聽技術

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

來源:IsBlog.cn

前言:在網路中,當信息進行傳播的時候,可以利用工具,將網路介面設置在監聽的模式,便可將網路中正在傳播的信息截獲或者捕獲到,從而進行攻擊。網路監聽在網路中的任何一個位置模式下都可實施進行。而黑客一般都是利用網路監聽來截取用戶口令。比如當有人佔領了一台主機之後,那麼他要再想將戰果擴大到這個主機所在的整個區域網話,監聽往往是他們選擇的捷徑。很多時候我在各類安全論壇上看到一些初學的愛好者,在他們認為如果佔領了某主機之後那麼想進入它的內部網應該是很簡單的。其實非也,進入了某主機再想轉入它的內部網路里的其它機器也都不是一件容易的事情。因為你除了要拿到他們的口令之外還有就是他們共享的絕對路徑,當然了,這個路徑的盡頭必須是有寫的許可權了。在這個時候,運行已經被控制的主機上的監聽程序就會有大收效。不過卻是一件費神的事情,而且還需要當事者有足夠的耐心和應變能力。主要包括:

數據幀的截獲

對數據幀的分析歸類

dos攻擊的檢測和預防

IP冒用的檢測和攻擊

在網路檢測上的應用

對垃圾郵件的初步過濾

研究的意義:

??1)我國的網路正在快速發展中,相應的問題也就顯現出來,網路管理及相應應用自然將越發重要,而監聽技術正是網路管理和應用的基礎,其意義當然重要,放眼當前相關工具linux 有snort tcpdump ,snift 等,window 有nexray, sniffer等五一不是國外軟體,隨著中國網路的發展,監聽系統必將大有用武之地,因此監聽技術的研究已是時事的要求。

??2)為什麼選擇linux 作為環境?中國入世,各種針對盜版的打擊力度和對於正版軟體的保護力度都將大大加強,windows的盜版軟體隨處可見的現象將會一去不返,面對這樣的情況,大部分的公司只有兩種選擇:要麼花大價錢向微軟購買正版軟體,要麼是用自由操作系統linux,特別是重要部門,如國家機關,政府部門,難道要把自己的辦公系統操縱在國外大公司手裡?北京的政府辦公系統已經轉用紅旗linux,而且linux的界面也在不但的改進,更加友好易操作,我們有理由相信.linux將在我國大有作為,這也是研究Linux 下網路監聽的原因。

關於Linux下網路監聽技術主要有兩個要點:

1)如何儘可能完整的截取網路上的數據幀,因為乙太網上每時每刻都可能有信息傳遞,而且根據乙太網的規模不同網路上的信息量也變化不大,所以截取數據幀不僅要保證數據幀的完整,而且還要考慮到如何才能減少漏截取數據幀。

2)就是對截取的數據幀的過濾分析,所謂監聽當然要“聽”得懂才行,所以把截取的數據幀翻譯成我們能用的數據,監聽才算成功。

網路監聽的原理

Ethernet協議的工作方式是將要發送的數據包發往連接在一起的所有主機。在包頭中包括有應該接收數據包的主機的正確地址,因為只有與數據包中目標地址一致的那台主機才能接收到信息包,但是當主機工作在監聽模式下的話不管數據包中的目標物理地址是什麼,主機都將可以接收到。許多區域網內有十幾台甚至上百台主機是通過一個電纜、一個集線器連接在一起的,在協議的高層或者用戶來看,當同一網路中的兩台主機通信的時候,源主機將寫有目的的主機地址的數據包直接發向目的主機,或者當網路中的一台主機同外界的主機通信時,源主機將寫有目的的主機IP地址的數據包發向網關。但這種數據包並不能在協議棧的高層直接發送出去,要發送的數據包必須從TCP/IP協議的IP層交給網路介面,也就是所說的數據鏈路層。網路介面不會識別IP地址的。在網路介面由IP層來的帶有IP地址的數據包又增加了一部分以太禎的禎頭的信息。在禎頭中,有兩個域分別為只有網路介面才能識別的源主機和目的主機的物理地址這是一個48位的地址,這個48位的地址是與IP地址相對應的,換句話說就是一個IP地址也會對應一個物理地址。對於作為網關的主機,由於它連接了多個網路,它也就同時具備有很多個IP地址,在每個網路中它都有一個。而發向網路外的禎中繼攜帶的就是網關的物理地址。

Ethernet中填寫了物理地址的禎從網路介面中,也就是從網卡中發送出去傳送到物理的線路上。如果區域網是由一條粗網或細網連接成的,那麼數字信號在電纜上傳輸信號就能夠到達線路上的每一台主機。再當使用集線器的時候,發送出去的信號到達集線器,由集線器再發向連接在集線器上的每一條線路。這樣在物理線路上傳輸的數字信號也就能到達連接在集線器上的每個主機了。當數字信號到達一台主機的網路介面時,正常狀態下網路介面對讀入數據禎進行檢查,如果數據禎中攜帶的物理地址是自己的或者物理地址是廣播地址,那麼就會將數據禎交給IP層軟體。對於每個到達網路介面的數據禎都要進行這個過程的。但是當主機工作在監聽模式下的話,所有的數據禎都將被交給上層協議軟體處理。

當連接在同一條電纜或集線器上的主機被邏輯地分為幾個子網的時候,那麼要是有一台主機處於監聽模式,它還將可以接收到發向與自己不在同一個子網(使用了不同的掩碼、IP地址和網關)的主機的數據包,在同一個物理通道上傳輸的所有信息都可以被接收到。

在UNIX系統上,當擁有超級許可權的用戶要想使自己所控制的主機進入監聽模式,只需要向Interface(網路介面)發送I/O控制命令,就可以使主機設置成監聽模式了。而在Windows9x的系統中則不論用戶是否有許可權都將可以通過直接運行監聽工具就可以實現了。

在網路監聽時,常常要保存大量的信息(也包含很多的垃圾信息),並將對收集的信息進行大量的整理,這樣就會使正在監聽的機器對其它用戶的請求響應變的很慢。同時監聽程序在運行的時候需要消耗大量的處理器時間,如果在這個時候就詳細的分析包中的內容,許多包就會來不及接收而被漏走。所以監聽程序很多時候就會將監聽得到的包存放在文件中等待以後分析。分析監聽到的數據包是很頭疼的事情。因為網路中的數據包都非常之複雜。兩台主機之間連續發送和接收數據包,在監聽到的結果中必然會加一些別的主機交互的數據包。監聽程序將同一TCP會話的包整理到一起就相當不容易了,如果你還期望將用戶詳細信息整理出來就需要根據協議對包進行大量的分析。Internet上那麼多的協議,運行進起的話這個監聽程序將會十分的大哦。

現在網路中所使用的協議都是較早前設計的,許多協議的實現都是基於一種非常友好的,通信的雙方充分信任的基礎。在通常的網路環境之下,用戶的信息包括口令都是以明文的方式在網上傳輸的,因此進行網路監聽從而獲得用戶信息並不是一件難點事情,只要掌握有初步的TCP/IP協議知識就可以輕鬆的監聽到你想要的信息的。前些時間美籍華人China-babble曾提出將望路監聽從區域網延伸到廣域網中,但這個想法很快就被否定了。如果真是這樣的話我想網路必將天下大亂了。而事實上現在在廣域網裡也可以監聽和截獲到一些用戶信息。只是還不夠明顯而已。在整個Internet中就更顯得微不足道了。

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

  乙太網上的數據幀主要涉及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;
  };

 

這是linux下的ip協議中的icmp的協議,這裡面主要的是前兩項參數,其中type是icmp協議的類型,而code 則是對type類型的再分析。如:type 0x03 是表示unsearchable,這時code的不同表示了不同的unsearchable :0x00表示網路不可尋,0x01表示主機不可尋,0x02表示協議不可尋,0x03表示埠不可尋,0x05表示源路由失敗,0x06網路不可知,0x07主機不可知。

Igmphdr 這是ip協議的igmp協議報頭

struct igmphdr

{

_u8 type;

_u8 code;

_u16 csum;

_u32 group;

};

 

這是Linux下的ip協議中的igmp協議,協議中主要是前面兩個屬性,Type表示igmp 協議的信息類型,code表示routing code. 然後,將截取的數據幀的地址賦值給定義的結構.由此可根據不同的結構分析數據,得到我們需要的信息.

檢測網路監聽的方法

網路監聽在上述中已經說明了。它是為了系統管理員管理網路,監視網路狀態和數據流動而設計的。但是由於它有著截獲網路數據的功能所以也是黑客所慣用的伎倆之一。

的。但是由於它有著截獲網路數據的功能所以也是黑客所慣用的伎倆之一。

檢測規則的定義

監聽是為了得到我們需要的網路信息,然而網路中的信息流量可能很大,例如一個擁有百台計算機的網路其一般監聽日誌是每分鐘以MB計算的,從如此大量的數據中找出我們需要的信息是很不容易的,於是我再程序中添加了檢測規則的定義,如此用戶就可以自己定義檢測的規則從大量的數據中找到需要的數據並對其進行操作。關於定義的包括了我們感興趣的大部分數據包屬性:包括了源地址,目的地址,源ip地址,目的ip地址,源埠,目的埠,協議類型,連接標誌,數據包數量,時間限制等。

如我們可定義將源物理地址為172.16.11.148且源埠為25,協議為tcp連接標誌為syn的數據存入相關日誌文件中,並且在檢測中採取鏈式規則,就是我們可以定義很多的規則而數據將像過流水線一樣通過各個規則的檢測處理,該功能和現在大多數的入侵檢測系統的規則定義相似,有了這種功能使網路監聽更具針對性,可以滿足不同用戶的需要。

一般檢測網路監聽的方法通過以下來進行:

網路監聽實際上是很難被發現的。因為運行監聽程序的主機在進監聽的過程中只是被動的接收在乙太網中傳輸的信息,它不會跟其它的主機交換信息的,也不能修改在網路中傳輸的信息包。這就說明了網路監聽的檢測是比較麻煩的事情。

一般情況下可以通過ps -ef或者ps -aux來檢測。但大多實施監聽程序的人都會通過修改ps的命令來防止被ps -ef的。

上邊提到過。當運行監聽程序的時候主機響應一般會受到影響變的會慢,所以也就有人提出來通過響應的速率來判斷是否受到監聽。如果說當你懷疑網內某太機器正在實施監聽程序的話,可以用正確的IP地址和錯誤的物理地址去ping它,這樣正在運行的監聽程序就會做出響應的。這是因為正常的機器一般不接收錯誤的物理地址的ping信息的。但正在進監聽的機器就可以接收,要是它的IP stack不再次反向檢查的話就會響應的。不過這種方法對很多系統是沒效果的,因為它依賴於系統的IP stack。

另一種就是向網上發大量不存在的物理地址的包,而監聽程序往往就會將這些包進行處理,這樣就會導致機器性能下降,你可以用icmp echo delay來判斷和比較它。還可以通過搜索網內所有主機上運行的程序,但這樣做其的難度可想而知,因為這樣不但是大的工作量,而且還不能完全同時檢查所有主機上的進程。可是如果管理員這樣做也會有很大的必要性,那就是可以確定是否有一個進程是從管理員機器上啟動的。

在Unix中可以通過ps –aun或ps –augx命令產生一個包括所有進程的清單:進程的屬主和這些進程佔用的處理器時間和內存等。這些以標準表的形式輸出在STDOUT上。如果某一個進程正在運行,那麼它將會列在這張清單之中。但很多黑客在運行監聽程序的時候會毫不客氣的把ps或其它運行中的程序修改成Trojan Horse程序,因為他完全可以做到這一點的。如果真是這樣那麼上述辦法就不會有結果的。但這樣做在一定程度上還是有所作為的。在Unix和Windows NT上很容易就能得到當前進程的清單了。

還有一種方式,這種方式要靠足夠的運氣。因為往往黑客所用的監聽程序大都是免費在網上得到的,他並非專業監聽。所以做為管理員用來搜索監聽程序也可以檢測。使用Unix可以寫這麼一個搜索的小工具了。有個叫Ifstatus的運行在Unix下的工具,它可以識別出網路介面是否正處於調試狀態下或者是在進聽裝下。要是網路介面運行這樣的模式之下,那麼很有可能正在受到監聽程序的攻擊。Ifstatus一般情況下不會產生任何輸出的,當它檢測到網路的介面處於監聽模式下的時候才回輸出。管理員可以將系統的cron參數設置成定期運行Ifstatus,如果有好的cron進程的話可以將它產生的輸出用mail發送給正在執行cron任務的人,要實現可以在crontab目錄下加****/usr/local/etc/ifstatus一行參數。這樣不行的話還可以用一個腳本程序在crontab下00****/usr/local/etc/run-ifstatus。

一般情況下監聽只是對用戶口令信息比較敏感一點(沒有無聊的黑客去監聽兩台機器間的聊天信息的那是個浪費時間的事情)。所以對用戶信息和口令信息進行加密是完全有必要的。防止以明文傳輸而被監聽到。現代網路中,SSH通信協議一直都被沿用,SSH所使用的埠是22,它排除了在不安全通道上通信的信息,被監聽的可能性使用到了RAS演算法,在授權過程結束后,所有的傳輸都用IDEA技術加密。但SSH並不就是完全安全的。因此,總的說來,監聽的檢測屬於安全防範的內容,需要非常綜合的知識和技能進行分析設計。

安全方面的考慮

DOS 攻擊的檢測與預防

我國還在網路的發展階段,自然有網路“hacker”、“crack”出現,也正是由於是發展階段,這些人的攻擊手段一般靠一些工具,這些工具一般分為破解性和破壞性,破解性耗時長成功率低,而破壞性的工具較符合這些人的性格故受歡迎,而DOS攻擊工具攻擊方便,成功率高,一般是“hacker”的首選。

所謂的DOS攻擊是一種拒絕服務攻擊,它並不是入侵系統,而只是讓系統崩潰,或處於拒絕連接狀態,DOS攻擊的方法主要是發送大量假的syn包使伺服器忙於應答和等待假syn的請求無法對正常的連接作出反應,或發送大量的廣播包利用某系系統對一些廣播包會產生回應得bug來形成廣播風暴阻塞網路,消耗伺服器資源達到進攻目的。現在還出現了分散式的DOS攻擊工具,它通過控制多台分機同時發送到攻擊包,威力巨大,同時,DOS攻擊還可能是另一種供給的前奏,這就是IP欺騙攻擊(該攻擊可以獲得ROOT許可權,危險係數最高),如果出現了DOS攻擊但又不阻塞網路,且攻擊目標不起眼,那麼這很可能就是一個IP欺或TCP截取的開始,所以DOS攻擊是一種破壞力大,效果明顯,且暗藏殺機的攻擊。

熱而DOS攻擊是較容易檢測的,其攻擊現象明顯,攻擊特徵突出,通過對網路的監聽不難發現,如上所述我們已經可以從網路上監聽數據幀並能分析他們,於是編寫一個程序使用戶可以通過定義自己的規範與數據幀比較然後對符合規範的數據作出相應的反應,對於DOS攻擊我們可以通過定義一個帶有時間限制的規範來檢測,如我們可以定義在1秒如出現100個以上的syn數據包為DOS攻擊,然後定義處理方法,如MAIL,LOG,SHUTDOWN或與_blank">防火牆聯動等。

IP冒用的檢測與攻擊

網路的飛速發展導致了原有的32位地址協議不能滿足飛速擴充的龐大計算機群,。利益不能均分,導致了IP冒用的出現,使網路秩序產生混亂。

在這裡先解釋一下ARP協議的應用。ARP協議是將IP地址轉換成MAC地址的協議,是區域網數據交流的基礎,一台計算機是如何將自己和某一IP地址綁定?首先,一台計算機啟動,他將向區域網發送其IP的ARP詢問包,這是為了防止IP衝突,如無人回答,其將發送其IP的ARP應答包,向區域網申明綁定其物理地址和ip地址,如果沒有在伺服器上使用固定的ip/mac表那麼沒有ip使用權的計算機也可以乘機綁定ip,這就是ip冒用。

對網路監測的利用可以達到檢測ip冒用的出現並對之進行攻擊的目的。具體方法是將檢測到的arp數據幀中的ip 和 eth 地址取出來與我們建立的對應表比較,如發現ip冒用的情況,則向其發送反向arp包使其網路中斷實現攻擊,該做法適用於那些無法控制路由器配置,又不想修改網關配置的網路管理。在程序中我採用的是被動式的arp查詢,也就是不發arp查詢包,可以說出了發攻擊包外對網路沒有增加另外的負擔。

監聽技術在網路測試中的應用

網路監聽不只是網路管理的基礎,還能應用在網路測試中,現在的網路測試工具大都建立在監聽基礎上,對監聽到的數據幀的種類和數量進行統計,從而實現網路的測試。同理可以使用本監聽程序對數據分類統計達到測試網路的作用。

例如目前較多用到的網路測試:

1)檢測廣播包在網路中的負載,即檢測廣播包在所有包中的比例,只要在程序中比較數據幀中目的地址的物理地址為ff:ff:ff:ff:ff:ff與總幀數的比例就可得知。從而給出了配置VLAN等的數據基礎。

2)檢測網路中因衝突產生的壞數據幀的數量,因為共享式乙太網採取的CSMA/CD協議,每台計算機發送信號時不能保證沒有有其它計算機也在發送信號,而在發現衝突后就停止發送,故會產生一些損壞的數據幀,檢測損壞的數據幀在網路數據中的比例是體現網路性能的重要參數,這種檢測對於監聽程序而言和第一種檢測大體相同,只是把統計的數據包改成衝突的數據幀,也就是數據幀大小小於64個位元組的數據幀的數量,同理類是網路測試都可以通過監聽程序實現,由此我們可以分析出更合適具體情況的布線方法等等。

垃圾郵件過濾的初步實現

垃圾郵件就是過濾到那些我們不想接受的,內容不安全的電子郵件,由於電子郵件的服務特點,使得電子郵件成為當代社會信息傳遞的便捷途徑之一,但同時也有一些人利用這一點發送不安全的危害社會的宣傳,於是垃圾郵件過濾就成為了必要,由於當前郵件伺服器管理的鬆懈,隨便一個人有台計算機有個IP就可以組建伺服器,使得郵件的來源相當複雜,所以要完全過濾不容易,但我們還是可以通過網路監聽來實現郵件的初步過濾.

第一種方法:就是屏蔽某些ip的swtp連接,通過監聽程序可以實現這點,如設定規則當源IP地址為****且TCP連接埠為25時就屏蔽連接。

第二種方法:由於很多電子郵件伺服器允許郵件轉發(這也是必要的,我們不可能能連接到每一台機),所以通過ip地址不一定可以屏蔽這個用戶的郵件他可以通過其他的伺服器轉發,因此在第一種方法無效的情況下我們可以通過賬號來屏蔽服務,由於電子郵件伺服器的統一命令要求需要用戶在發郵件時申明用戶例如:mail from XXX@XXX ,所以我們可以通過監聽程序來發現我們不喜歡的用戶並屏蔽,這要求我們對數據幀不僅分析報頭,還要分析數據,將其與我們設定的字元串比較,如相同,則找到了屏蔽連接.



[火星人 ] Linux下的網路監聽技術已經有420次圍觀

http://coctec.com/docs/net/show-post-68413.html