1. 程式人生 > >tcpdump交叉編譯和一些簡單命令

tcpdump交叉編譯和一些簡單命令

下面介紹一下具體過程。
1.在http://www.tcpdump.org下載libpcap-1.0.0.tar.gz和tcpdump-4.0.0.tar.gz兩個檔案。
2.將這兩個檔案放在/home下解壓。
3.編譯,安裝libpcap-1.0.0:
   (1)進入libpcap目錄,開啟configure。將下面兩端程式碼註釋掉
       #if test -z "$with_pcap" && test "$cross_compiling" = yes; then
     # { { echo "$as_me:$LINENO: error: pcap type not determined when cross-compiling; use --with-pcap=..." >&5
     #echo "$as_me: error: pcap type not determined when cross-compiling; use --with-pcap=..." >&2;}
     #   { (exit 1); exit 1; }; }
     #fi
   .......
     #   if test $ac_cv_linux_vers = unknown ; then
     #   { { echo "$as_me:$LINENO: error: cannot determine linux version when cross-compiling" >&5
     #echo "$as_me: error: cannot determine linux version when cross-compiling" >&2;}
     #   { (exit 1); exit 1; }; }
     #   fi

註釋掉之後,再./configure --host=arm-linux CC=arm-linux-gcc, 會看到生成的Makefile.
(如果不註釋掉上面兩段程式碼,可能會出現determine linux version when cross-compiling或pcap type not determined when cross-compiling導致無法configure)。
  配置之後,會生成Makefile。開啟Makefile發現CC=arm-uclibc-linux-gcc,說明交叉編譯配置成功。然後make,make install。

3.編譯,安裝tcpdump-4.0.0
   (1)進入tcpdump目錄,開啟configure,將下面一段程式碼註釋掉
     #   if test $ac_cv_linux_vers = unknown ; then
     #   { { echo "$as_me:$LINENO: error: cannot determine linux version when cross-compiling" >&5
     #echo "$as_me: error: cannot determine linux version when cross-compiling" >&2;}
     #   { (exit 1); exit 1; }; }
     #   fi
註釋掉之後,再./configure --host=arm-linux CC=arm-linux-gcc, 會看到生成的Makefile.

   (2)開啟生成的Makefile,將INCLS項改為INCLS=-I.-I./../libpcap-1.0.0 -I$(srcdir)/missing -I/usr/local/include,
      然後make,make install。在/usr/local/sbin下有個tcpdump的二進位制檔案,這個就是交叉編譯成功的tcpdump
   (3)將這個二進位制檔案放到tftpboot資料夾,用過tftp將這個檔案下載到arm板上,chmod 777 tcpdump將其變為可執行檔案。
   (4)執行tcpdump,成功!

tcp抓包的簡單命令

tcpdump 的抓包儲存到檔案的命令引數是-w xxx.cap
抓eth1的包
tcpdump -i eth1 -w /tmp/xxx.cap
抓 192.168.1.123的包
tcpdump -i eth1 host 192.168.1.123 -w /tmp/xxx.cap
抓192.168.1.123的80埠的包
tcpdump -i eth1 host 192.168.1.123 and port 80 -w /tmp/xxx.cap
抓192.168.1.123的icmp的包
tcpdump -i eth1 host 192.168.1.123 and icmp -w /tmp/xxx.cap
抓192.168.1.123的80埠和110和25以外的其他埠的包
tcpdump -i eth1 host 192.168.1.123 and ! port 80 and ! port 25 and ! port 110 -w /tmp/xxx.cap
抓vlan 1的包
tcpdump -i eth1 port 80 and vlan 1 -w /tmp/xxx.cap
抓pppoe的密碼
tcpdump -i eth1 pppoes -w /tmp/xxx.cap
以100m大小分割儲存檔案, 超過100m另開一個檔案 -C 100m
抓10000個包後退出 -c 10000
後臺抓包, 控制檯退出也不會影響:
nohup tcpdump -i eth1 port 110 -w /tmp/xxx.cap &
抓下來的檔案可以直接用ethereal 或者wireshark開啟。