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有如下常用命令
tcpdump -D: 顯示所有支持截取的設備 tcpdump -i eth0 -w capture.pcap: 截取eth0接口的數據並保存至capture.pcap(可用wireshark查看) tcpdump -i any –w capture.pcap: 截取所有接口的數據並保存至capture.pcap
4. tcpdump截取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>