虽然一直在写web后台,可是对底层网络知道的也不多。毕竟这些东西经过层层封装,到web框架时给我们提供的内容已经和TCP/IP相隔很远了。可是作为一个有好奇心的人。我还是会仔细去刨根问底,得到心中的答案。梳理清楚web后台开发中所接触的种种东西。以前总想把东西写简单写点大而全的东西,可是底层网络涉及到的内容真是太特么复杂了。我也只能慢慢来了。工欲善其事必先利其器,本篇列出学习过程中用到的一些网络工具及资源(内容不定期更新)

软件

  1. tcpdump/dumpcap/wireshark

    这应该是最广为人知的数据嗅探工具了,他们之间的区别和联系在stackexchange有一个回答

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    wireshark - powerfull sniffer which can decode lots of protocols, lots of filters.

    tshark - command line version of wireshark

    dumpcap (part of wireshark) - can only capture traffic and can be used by wireshark / tshark

    tcpdump - limited protocol decoding but available on most *NIX platforms

    ettercap - used for injecting traffic not sniffing

    All tools use libpcap (on windows winpcap) for sniffing. Wireshark / tshark / dumpcap can use tcpdump filter syntax as capture filter.

    As tcpdump is available on most *NIX system I usually use tcpdump. Depending on the problem I sometimes use tcpdump to capture traffic and write it to a file and the later use wireshark to analyze it. If available I use tshark but if the problem gets more complicated I still like to write the data to a file and then use Wireshark for analysis.

    比较牛的是以上产品均出自The Tcpdump team组织,更牛的是查看github统计数据得知大概主要仅有四个人维护。。。。。。
    作为低端用户本人使用tcpdump和wireshark就够了。为了减少数据包。我一般会用vagrant开虚拟机抓包查看请求。使用vagrant ssh -c "sudo tcpdump -i eth0 -s 0 -U -w - not port 22 and tcp" -- -ntt| wireshark -k -i - 或者 vagrant ssh -c "sudo dumpcap -P -i any -w - -f 'not tcp port 22 and tcp'" -- -ntt | wireshark -k -i - 均可。一般dumpcap没有预装~~。把tcpdump的参数解释下,-i(interface)表示监听某一个接口或全部,-s表示单个数据包最大多少,很明显0代表没限制,-U设置每个包输出为一行,-w保存。后面即为过滤表达式,注意:一定要加上-- -ntt不加上wireshark会报错,至于为什么我还真没搞明白。。。。很明显使用tcpdump和wireshark最基本的技能是学会过滤表达式的语法,否则过于嘈杂的信息流马上会触发密集恐惧症吧。注意:wireshark中capture filter和display filter是决然不同的语法。快速入门请查看capture filter速查表display filter速查表

    是否对嗅探的原理感到灰常好奇。一图胜千言。希望下面这张图能够初步解决你的疑惑(谷歌搜索图片libpcap)

    嗅探原理

  2. scapy

    大概可以看成是python对libpcap的封装。可以不仅仅可以嗅探,还可以直接构建一个包发送出去(以上wireshark是不支持的),所支持的协议也是灰常之多。可谓是学习之利器。可以查看官方DEMO体验下,不过此软件相对的依赖较多。

  3. socat

    和netcat是一类,据说更强大。至于有多强大我就不知道了。有待以后挖掘。本人也就按照tldr上的示例按需要进行体验了下socat - TCP-LISTEN:8080,fork感觉是挺好用哒

  4. httpie

    某一天我发现github上python类目star数目最多的是这货。然后我就试用了下。。。。。对于调试来说易用性简直秒杀curl无数倍(仅从调试角度)。完全就是python里面requests和urllib的对比哇。使用灰常简单,比如http g.cn -v --debug(读者不妨亲自体验下),比较值得关注的是httpie的session使用以及它支持配置文件,详情请查看文档

  5. fiddler

    主要对应用层http进行处理。它主要使用WinInet自动设置代理或者用户手动设置代理。意味着如果无法设置代理那么该软件是无法捕获到需要的数据的。另外它支持导入pcap格式的报文查看http交互(不能实时灰常可惜),fiddler原理可查看。最后放一张图
    fiddler原理

  6. tldr

    该软件不属于该类别,可是命令行对于刚接触的新手是不那么有好的。比如tcp -h得到

    1
    2
    3
    4
    5
    6
    7
    8
    9
        tcpdump version 4.7.3 -- Apple version 67
    libpcap version 1.5.3 - Apple version 54
    Usage: tcpdump [-aAbdDefhHIJKlLnNOpqRStuUvxX#] [ -B size ] [ -c count ]
    [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
    [ -i interface ] [ -j tstamptype ] [ -M secret ]
    [ -Q metadata-filter-expression ]
    [ -r file ] [ -s snaplen ] [ -T type ] [ --version ] [ -V file ]
    [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z command ]
    [ -Z user ] [ expression ]

    也是灰常容易让人摸不着头脑,tldr tcpdump可以给出常用的最基本的用法。对于初学者非常友好,能够最开始就体验到神器的强大,这样至少兴趣是产生了吧~~~

  7. iperf3

    使用简单(iperf3 --help),测量tcp/udp传输数据丢包率等,牛X的是即使没有公网ip也能打洞进行测试,甚至于官网还提供了一些公共服务器让你进行学习测试。初略解释下,分别需要在服务端和客户端运行。大概参数如下

    1
    2
    3
    4
    服务端:iperf3 -s -i1 -f M
    iperf3 -c ip_address -t 10 -i 1 -u -b 20M -l 1K -R
    c/s指定是服务端还是客户端
    t(time测试总时间),i(interval报告间隔时间),u(udp模式),b(bandwidth带宽),l(len单个包的荷载),f(format报告格式),R(reverse进行反向测试)

    资源

    抓包专业资料较多,cheat-sheet值得一看。另外此博客友链也可以看看
    酷 壳–TCP 的那些事儿

相关资料

libpcap维基百科
tcpdump/dumpcap区别
capture filter和display filter不同
基于libpcap的sniffer实现