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了。

  • 相关阅读:
    内核配置中Default kernel command string和uboot中bootargs变量的区别
    内核编译配置选项含义
    WARNING: Unable to open an initial console
    Linux内核学习之四库全书
    EABI和OABI
    0.8.11版本ffmpeg一天移植将近完成。
    mmsplayer for wince,windows demo已经发布
    mmsplayer for wince,windows demo已经发布
    0.8.11版本ffmpeg一天移植将近完成。
    ffmpeg AT&T汇编转intel汇编 之(read_time)
  • 原文地址:https://www.cnblogs.com/aomi/p/7650169.html
Copyright © 2011-2022 走看看