• 为OpenWrt/LEDE编译rpcapd 用于Wireshark远程抓包

    rpcapd是winpcap带的专门用来远程抓包的小工具,但是winpcap是给Windows用的,Linux下需要自己编译,如果要放到路由器上用,就要交叉编译了。

    以前编译都是直接在OpenWrt/LEDE的menuconfig里面选,现在不能选了,需要直接用toolchain手动编译。

    步骤如下:

    # 首先要把OpenWrt/LEDE的SDK下载或者编译出来
    # 以下的路径自行修改
    
    export PATH=$PATH:/root/lede/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16/bin
    export STAGING_DIR=/root/lede/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16
    
    export CC=mipsel-openwrt-linux-musl-gcc
    export CXX=mipsel-openwrt-linux-musl-g++
    export AR=mipsel-openwrt-linux-musl-ar
    export RANLIB=mipsel-openwrt-linux-musl-ranlib
    export ac_cv_linux_vers=4.4.61
    
    # 在https://www.winpcap.org/devel.htm 下载winpcap源码
    unzip source.zip
    cd winpcap/wpcap/libpcap
    chmod +x configure
    ./configure --build=x86_64-unknown-linux-gnu --host=mipsel-openwrt-linux --with-pcap=linux
    make
    
    # 在winpcap/wpcap/libpcap/pcap-int.h 里加上一行 #include <string.h> 否则在 strlcpy 处会报错
    cd rpcapd
    # 修改 Makefile
    # 修改编译器,改成CC=mipsel-openwrt-linux-gcc
    make
    
    file rpcapd
    # rpcapd: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked, interpreter /lib/ld-musl-mipsel-sf.so.1, not stripped

    相关参考:https://talpachen.github.io/2016/07/20/Net/rpcapd/

     

    附我编译的
      适用于LEDE(musl)的ar71xx版rpcapd:rpcapd_ar71xx.7z
      适用于LEDE(musl)的ramips版rpcapd:rpcapd_ramips.7z

  • 使用Wireshark+SSH进行实时tcpdump远程抓包分析

    背景:有一台可以tcpdump的OpenWrt路由器,用它来抓下面的客户端的数据包。以前我一直都是把tcpdump的结果保存成.cap文件再传到PC上用Wireshark打开,直到今天,才学会了更方便快捷的办法。网上给出的命令是这样的:

    plink -ssh USER@HOST -pw PASS "tcpdump -s 0 -U -n -i br-lan -w - not port 22" | wireshark -k -i -

    其中plink是一个Windows下的命令行SSH客户端程序(Linux系统下改成ssh的相应命令)。试了一下,确实可以!

    为什么可以?

    由“|”可见它是通过管道来传输的,难道数据还能直接从输入输出传输?因此去看看文档,并找到了答案:

    在tcpdump的manpage中得知,最重要的参数是”-w -“,当文件名是”-“时,输出原数据包到stdout;-U参数是让数据包打印时直接输出到stdout而不是在输出缓存满后再输出;”-s 0″表示设置最大数据包长度为默认值(262144 Bytes)。

    而从Wireshark的帮助中可知,当抓包接口为”-“时,就从stdin读取数据,所以就ok了。