在Mac上抓包常用Charles,在linux服务器上抓包,比较常用tcpdump,tcpflow命令,tcpdump对http包的抓取支持不好,tcpflow的http的抓取表现不错。tcpdump是按照包为单位进行输出的,阅读起来不是很方便。 而tcpflow是面向tcp流的。 每个tcp传输会保存成一个文件,所以一个tcp会话会产生两个文件,每个方向产生一个文件。
安装
- 安装前,先确保已安装下面的依赖,若没可以再安装下
yum -y install git gcc-c++ automake autoconf boost-devel cairo-devel libpcap-devel zlib-devel
- 编译安装tcpflow
下载地址 http://digitalcorpora.org/downloads/tcpflow/
./configure
make
sudo make install
但是由于boost版本过低报了下面这个错误:
configure: error:
tcpflow requires a version of Boost that has Boost interval_map and interval_set.
Your version is too old! Please install a current version of Boost from http://www.boost.org/users/download/.
Try these commands:
wget http://downloads.sourceforge.net/project/boost/boost/1.53.0/boost_1_53_0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fboost%2Ffiles%2Fboost%2F1.53.0%2F&ts=1362359340&use_mirror=hivelocity
tar xfz boost_1_53_0.tar.gz
cd boost_1_53_0
sh bootstrap.sh
./b2
sudo ./b2 install
... and then re-run configure!
按照上面的提示下载boost新版本安装后,重写编译安装tcpflow即可。
使用
tcpflow和tcpdump的命令有些类似
man tcpflow //查看使用手册
tcpflow -i eth0 host 'ip' //使用该命令最好在一个空的文件夹下,因为抓包产生的文件会全部放在当前目录下,文件中的内容和浏览器调试工具中看到的类似
tcpflow -ci eth0 'src host ip' // 抓该主机发送的包 -c是打印出来,不保存文件中
tcpflow -i eth0 'dst host ip' //抓取该ip主机接收的包
tcpflow -i eth0 'port 80 and src host ip' //监听该主机通过80端口发送的数据包
Charles手机端抓包
- 查看电脑ip
- 打开iOS设置,进入当前wifi连接(Mac在一个局域网内),设置HTTP代理Group,将服务器填为上一步中获得的IP,端口填8888
然后操作手机就可以看到抓包信息了,其实就是用Charles来做手机的HTTP代理,所以关闭Charles后,记着也要关闭手机的代理设置。
Mac 系统抓包,打开Charles,在菜单中勾选Proxy–>Mac OS X proxy 即可