zoukankan      html  css  js  c++  java
  • tcpdump学习(2):基本使用

    安装好tcpdump之后,运行tcpdump:

      1. tcpdump -D 获取网络适配器列表,以下是在Ubuntu上获取到的结果:
      root@holmesian-laptop:~# tcpdump -D
      1.eth0
      2.wlan0
      3.usbmon1 (USB bus number 1)
      4.usbmon2 (USB bus number 2)
      5.usbmon3 (USB bus number 3)
      6.usbmon4 (USB bus number 4)
      7.usbmon5 (USB bus number 5)
      8.any (Pseudo-device that captures on all interfaces)
      9.lo

      2. tcpdump -i <需要监控的网络适配器编号>,例如我想监控我的无线网卡wlan0,则使用tcpdump -i 2。
      root@holmesian-laptop:~# tcpdump -i 2
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on wlan0, link-type EN10MB (Ethernet), capture size 96 bytes
      21:24:14.578430 00:24:f9:05:78:00 (oui Unknown) Unknown SSAP 0x78 > 00:1f:3a:18:fa:06 (oui Unknown) Unknown DSAP 0xd8 Information, send seq 0, rcv seq 16, Flags [Command], length 70
      21:24:14.578447 00:24:f9:05:78:00 (oui Unknown) Unknown SSAP 0x78 > 00:1f:3a:18:fa:06 (oui Unknown) Unknown DSAP 0xd8 Information, send seq 0, rcv seq 16, Flags [Command], length 223
      21:24:14.995603 00:24:f9:05:78:00 (oui Unknown) Unknown SSAP 0x20 > 78:dd:08:d1:b2:ca (oui Unknown) Unknown DSAP 0x76 Information, send seq 0, rcv seq 16, Flags [Command], length 70
      21:24:15.019811 00:24:f9:05:78:00 (oui Unknown) Unknown SSAP 0xa6 > 2c:81:58:ec:9c:54 (oui Unknown) Unknown DSAP 0x0a Information, send seq 0, rcv seq 16, Flags [Command], length 72
      如果不使用-i来定义监控适配器的话,默认使用列表中的第一个;

      3. 使用无线网卡wlan0监控IP地址为172.16.86.111上443端口的tcp协议:
      tcpdump -i 2 host 172.16.86.111 and tcp port 443

      4. 如果想要显示数据包的内容,需要使用-X参数,如,我想要显示捕获的https数据包http header的内容:
      tcpdump -X -i 2 host 172.16.86.111 and tcp port 443

      显示结果如下:
      21:27:53.662741 IP holmesian-laptop.local.44239 > 172.16.86.111.https: Flags [S], seq 24296623, win 5840, options [mss 1460,sackOK,TS val 153804 ecr 0,nop,wscale 6], length 0
      0x0000: 4500 003c e463 4000 4006 514a ac10 567e E..<.c@.@.QJ..V~
      0x0010: ac10 566f accf 01bb 0172 bcaf 0000 0000 ..Vo.....r......
      0x0020: a002 16d0 66a8 0000 0204 05b4 0402 080a ....f...........
      0x0030: 0002 58cc 0000 0000 0103 0306 ..X.........
      21:27:56.660488 IP holmesian-laptop.local.44239 > 172.16.86.111.https: Flags [S], seq 24296623, win 5840, options [mss 1460,sackOK,TS val 154554 ecr 0,nop,wscale 6], length 0
      0x0000: 4500 003c e464 4000 4006 5149 ac10 567e E..<.d@.@.QI..V~
      0x0010: ac10 566f accf 01bb 0172 bcaf 0000 0000 ..Vo.....r......
      0x0020: a002 16d0 63ba 0000 0204 05b4 0402 080a ....c...........
      0x0030: 0002 5bba 0000 0000 0103 0306 ..[.........

    .c
        可以看到该结果只显示了https头的一部分,没有显示全,是因为tcpdump默认将显示的数据长度截断了,可以使用-s后面加数据长度,来设置数据显示长度:
      tcpdump -X -s 0 -i 2 host 172.16.86.111 and tcp port 443

      以上的例子中,-s 0 表示自动设置长度使其能够显示所有数据。

      5. 捕获的数据太多,不断刷屏,可能需要将数据内容记录到文件里,需要使用-w参数:
      tcpdump -X -s 0 -w aaa host 192.9.200.59 and tcp port 8000
      则将之前显示在屏幕中的内容,写入tcpdump可执行文件同级目录下的aaa文件中。
      文件查看方式如下,需要使用-r参数:
      tcpdump -X -s 0 -i 2 -r holmesian host 172.16.86.111 and tcp port 443

      如果这样写:
      tcpdump -r holmesian
      则只能看到最简单的数据传输交互过程,看不到数据包内容,查看时也需要使用相应的参数。

      6.总结
      总结一下,tcpdump的参数分两个部分,选项(Options)和表达式(expression):
      root@holmesian-laptop:~# tcpdump -h

      tcpdump version 4.0.0
      libpcap version 1.0.0
      Usage: tcpdump [-aAdDefIKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
      [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
      [ -i interface ] [ -M secret ] [ -r file ]
      [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]
      [ -y datalinktype ] [ -z command ] [ -Z user ]
      [ expression ]

    以下原文链接:点击打开链接

    tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04。

    tcpdump的命令格式

    tcpdump的参数众多,通过man tcpdump可以查看tcpdump的详细说明,这边只列一些笔者自己常用的参数:

    tcpdump [-i 网卡] -nnAX '表达式'

    各参数说明如下:

    • -i:interface 监听的网卡。
    • -nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。
    • -A:以ascii的方式显示数据包,抓取web数据时很有用。
    • -X:数据包将会以16进制和ascii的方式显示。
    • 表达式:表达式有很多种,常见的有:host 主机;port 端口;src host 发包主机;dst host 收包主机。多个条件可以用and、or组合,取反可以使用!,更多的使用可以查看man 7 pcap-filter。

    下面进行一些命令测试,如果没有权限,可以先切换成root用户。

    监听网卡eth0

    $ tcpdump -i eth0

    这个方式最简单了,但是用处不多,因为基本上只能看到数据包的信息刷屏,压根看不清,可以使用ctrl+c中断退出,如果真有需求,可以将输出内容重定向到一个文件,这样也更方便查看。

    监听指定协议的数据

    $ tcpdump -i eth0 -nn 'icmp'

    这个是用来监听icmp协议的数据,就是ping命令使用的协议。类似的,如果要监听tcp或者是udp协议,只需要修改上例的icmp就可以了。ping下监听的机器,输出如下:

    linux使用tcpdump抓包示例

    linux使用tcpdump抓包示例

    每一行的各个数据表示的含义:

    抓到包的时间 IP 发包的主机和端口 > 接收的主机和端口 数据包内容

    监听指定的主机

    $ tcpdump -i eth0 -nn 'host 192.168.1.231'

    这样的话,192.168.1.231这台主机接收到的包和发送的包都会被抓取。

    $ tcpdump -i eth0 -nn 'src host 192.168.1.231'

    这样只有192.168.1.231这台主机发送的包才会被抓取。

    $ tcpdump -i eth0 -nn 'dst host 192.168.1.231'

    这样只有192.168.1.231这台主机接收到的包才会被抓取。

    监听指定端口

    $ tcpdump -i eth0 -nnA 'port 80'

    上例是用来监听主机的80端口收到和发送的所有数据包,结合-A参数,在web开发中,真是非常有用。

    监听指定主机和端口

    $ tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.231'

    多个条件可以用and,or连接。上例表示监听192.168.1.231主机通过80端口发送的数据包。

    监听除某个端口外的其它端口

    $ tcpdump -i eth0 -nnA '!port 22'

    如果需要排除某个端口或者主机,可以使用“!”符号,上例表示监听非22端口的数据包。

    小结:

    tcpdump这个功能参数很多,表达式的选项也非常多,非常强大,不过常用的功能确实不多。详情可以通过man查看系统手册。

    另外在抓取web包的时候,发送网页内容都是很奇怪的字符,发现是apache开启了gzip压缩的缘故,关闭掉gzip压缩就可以了。在ubuntu 12.04下,编辑vim /etc/apache2/mods-enabled/deflate.load文件,将加载模块deflate_module的语句注释掉,然后重启apache就OK了。

  • 相关阅读:
    创建类以及引用一个类
    修改hosts文件
    微信第三方登录接口开发
    Android定位
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 725. Split Linked List in Parts
    Leetcode 445. Add Two Numbers II
    Leetcode 328. Odd Even Linked List
    Leetcode 237. Delete Node in a Linked List
    Leetcode 234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/aomi/p/7650169.html
Copyright © 2011-2022 走看看