1. 介紹
tcpdump是一款用來截取網絡數據的工具;這里主要介紹的是為嵌入式Linux編譯tcpdump的方法
2. 編譯
首先去官網下載源代碼, 需要下載tcpdump和libpcap, 將他們解壓到同一個目錄下~/tcpdump/papage/
2.1 libpcap
進入libpcap源碼所在目錄, 執行如下命令
./configure --prefix=~/tcpdump/tools --host=arm-linux --target=arm-linux CC=arm-linux-xxx-gcc --with-pcap=linux
make; make install
編譯成功后會在~/tcpdump/tools目錄下生成三個個文件夾bin, include和lib;里面包含了libpcap的頭文件, 庫及配置信息
2.2 tcpdump
進入tcpdump源碼所在目錄, 執行如下命令
./configure --prefix=~/tcpdump/tools --host=arm-linux --target=arm-linux CC=arm-linux-xxx-gcc ac_cv_linux_vers=2
make; make install
編譯完成后會在~/tcpdump/tools/sbin目錄下找到獨立的可執行文件tcpdump
這里需要說明的是CC參數指定了交叉編譯器, 編譯兩者時需要指定相同的目錄, 否則在編譯tcpdump時需要指定libpcap的路徑
3. 命令
tcpdump有如下常用命令
tcpdump -D: 顯示所有支持截取的設備
tcpdump -i eth0 -w capture.pcap: 截取eth0接口的數據並保存至capture.pcap(可用wireshark查看)
tcpdump -i any –w capture.pcap: 截取所有接口的數據並保存至capture.pcap
4. usb截取
除了網絡數據包, tcpdump還可以截取usb數據
前提是系統中支持usbmon, 參考<CentOS 7下Wireshark捕獲USB數據包>
通過如下命令安裝usbmon模塊
modprobe usbmon(如果已經編譯進內核該步驟則不需要)
mount -t debugfs none /sys/kernel/debug
ls /sys/kernel/debug/usb/usbmon
tcpdump -i usbmon1 -w usb.pcap
參考:
<man tcpdump>