2021年1月31日 星期日

wireshark捕獲/過濾封包

一、捕獲過濾:先在capture option中設定,僅捕獲符合條件的封包,可避免記憶體佔用。

Protocol(協議):
可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
如果沒有特別指明是什麼協議,則預設使用所有支援的協議。

Direction(方向):
可能的值: src, dst, src and dst, src or dst
如果沒有特別指明來源或目的地,則預設使用 “src or dst” 作為關鍵字。
例如,”host 10.2.2.2″與”src or dst host 10.2.2.2″是一樣的。

Host(s):
可能的值: net, port, host, portrange.
如果沒有指定此值,則預設使用”host”關鍵字。
例如,”src 10.1.1.1″與”src host 10.1.1.1″相同。

Logical Operations(邏輯運算):
可能的值:not, and, or.
否(“not”)具有最高的優先順序。或(“or”)和與(“and”)具有相同的優先順序,運算時從左至右進行。
例如,
“not tcp port 3128 and tcp port 23″與”(not tcp port 3128) and tcp port 23″相同。
“not tcp port 3128 and tcp port 23″與”not (tcp port 3128 and tcp port 23)”不同。

  • host 192.168.1.1      //抓取192.168.1.1 收到和發出的封包
  • src host 192.168.1.1    //抓取來源地址192.168.1.1發出的封包
  • dst host 192.168.1.1    //揝取目標地址192.168.1.1收到的封包
  • src host hostname    //根據主機名過濾
  • ether host 80:05:09:03:E4:35    //根據MAC地址過濾
  • net 192.168.1    //過濾網段
  • src net 192.168 //過濾來源網段
  • dst net 192 //過濾目標網段
  • 抓取所有目的地址是192.168.1.2 或192.168.1.3 埠是80 的TCP 資料
    (tcp port 80) and ((dst host 192.168.1.2) or (dst host 192.168.1.3)) 
  • 抓取所有目標MAC 地址是80:05:09:03:E4:35 的ICMP 資料
    (icmp) and ((ether dst host 80:05:09:03:E4:35))
  • 抓取所有目的網路是192.168,但目的主機不是192.168.1.2 的TCP 資料
    (tcp) and ((dst net 192.168) and (not dst host 192.168.1.2))
  • 捕獲主機192.168.1.1 和主機192.168.1.2 或192.168.1.3的通訊
    host 192.168.1.1 and  (192.168.1.2 or 192.168.1.3 )
  • 獲取主機192.168.1.1除了和主機192.168.1.2之外所有主機通訊的封包
    host 192.168.1.1 and ! 192.168.1.2
  • 獲取主機192.168.1.1接收或發出的telnet包,telnet使用tcp 23埠
    tcp port 23 and host 192.168.1.1

二、顯示過濾:完整的復現網路環境再加以過濾,較佔用記憶體

  • 表達式
    • 數據鏈路層:
      • 篩選mac地址為04:f9:38:ad:13:26的數據包:eth.addr == 04:f9:38:ad :13:26
      • 篩選源mac地址為04:f9:38:ad:13:26的數據包:eth.src == 04:f9:38:ad:13:26
      • 抓取所有目標MAC 地址是80:05:09:03:E4:35 的ICMP 資料
      • icmp && eth.dst==80:05:09:03:E4:35
    • 網絡層:
      • 篩選ip地址為192.168.1.1的數據包:ip.addr == 192.168.1.1
      • 篩選192.168.1.0網段的數據:ip contains "192.168.1"
      • 篩選192.168.1.1和192.168.1.2之間的數據包:ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2
      • 篩選從192.168.1.1到192.168.1.2的數據包:ip.src == 192.168.1.1 && ip.dst = = 192.168.1.2
      • ip.addr ==192.168.1.1 //顯示所有與192.168.1.1相關的封包
      • ip.dst==192.168.1.1 //顯示目標是192.168.1.1的封包
      • ip.src ==192.168.1.1 //顯示來源是192.168.1.1的封包
      • ip.src==192.168.0.0/16   //網路過濾,過濾一個網段
    • 傳輸層:
      • 篩選tcp協議的數據包:tcp
      • 篩選除tcp協議以外的數據包:!tcp
      • 篩選端口為80的數據包:tcp.port == 80
      • 篩選12345端口和80端口之間的數據包:tcp.port == 12345 && tcp.port == 80
      • 篩選從12345端口到80端口的數據包:tcp.srcport == 12345 && tcp. dstport == 80
      • 抓取所有目的地址是192.168.1.2 或192.168.1.3 埠是80 的TCP 資料
        tcp.port==80 && (ip.dst==192.168.1.2 || ip.dst==192.168.1.3)
    • 應用層:
      • http中http.request表示請求頭中的第一行(如GET index.jsp HTTP/1.1)
      • http.response表示響應頭中的第一行(如HTTP/1.1 200 OK),其他頭部都用http.header_name形式。
      • 篩選url中包含.php的http數據包:http.request.uri contains ".php"
      • 篩選內容包含username的http數據包:http contains "username"
      • http.request.method == POST
      • http.request.method == GET
      • http.response.code == 200
  • 抓取所有目的網路是192.168,但目的主機不是192.168.1.2 的TCP 資料
    tcp&&ip.dst==192.168.0.0/16&&!(ip.dst==192.168.1.2)
  • 捕獲主機192.168.1.1 和主機192.168.1.2 或192.168.1.3的通訊
    ip.addr==192.168.1.1&&(ip.addr==192.168.1.2||ip.addr==192.168.1.3)
  • 獲取主機192.168.1.1除了和主機192.168.1.2之外所有主機通訊的封包
    ip.addr==192.168.1.1&&!ip.addr==192.168.1.2
  • 獲取主機192.168.1.1接收或發出的telnet包,telnet使用tcp 23埠
    tcp.port==23&&ip.addr==192.168.1.1
  • 過濾特定Protocol,可直接輸入協定名稱,例如http、https、ssl及ssh等。
    • http.request //顯示GET(單純請求下載) or POST上傳資料
    • http and not http.request //顯示網頁資料內容
  • packet lost的查看
    • tcp.analysis.flags tcp.flags.syn == 1
    • tcp包的syn字段為1
    • tco.flags.reset == 1
本文參考自 ITREAD01,語法可參見程式前沿