精华内容
下载资源
问答
  • 主要介绍了Android中使用tcpdumpwireshark进行抓包并分析技术介绍,本文讲解了下载并安装tcpdump、pc上安装wireshark等内容,需要的朋友可以参考下
  • tcpdump详解及结合Wireshark使用 主体内容转自: https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac718685382c0aa1cb5dbca45&scene=5&...

    tcpdump详解及结合Wireshark使用

    主体内容转自:
    https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac718685382c0aa1cb5dbca45&scene=5&srcid=0527iHXDsFlkjBlkxHbM2S3E#rd

    内容介绍

    1、首先本文介绍了Linux下简单而强大的抓包命令tcpdump

    2、然后因为tcpdump命令抓包好用,而wireshark分析好用,因此后面部分讲解了二者如何结合使用

    3、tcpdump抓的包要保存,然后用wireshark打开分析,如抓取本地环回地址的包,用命令:sudo tcpdump -i lo -w loop.pcap 然后用wireshark打开分析即可

    4、本文后边还画图讲解了tcp三次握手,非常详细

    #####################下面是转载的主要内容###############

    1 起因


    前段时间,一直在调线上的一个问题:线上应用接受POST请求,请求body中的参数获取不全,存在丢失的状况。这个问题是偶发性的,大概发生的几率为5%-10%左右,这个概率已经相当高了。在排查问题的过程中使用到了tcpdump和Wireshark进行抓包分析。感觉这两个工具搭配起来干活,非常完美。所有的网络传输在这两个工具搭配下,都无处遁形。


    为了更好、更顺手地能够用好这两个工具,特整理本篇文章,希望也能给大家带来收获。为大家之后排查问题,添一利器。


    2 tcpdump与Wireshark介绍


    在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大。它是基于Unix系统的命令行式的数据包嗅探工具,可以抓取流动在网卡上的数据包。


    默认情况下,tcpdump不会抓取本机内部通讯的报文。根据网络协议栈的规定,对于报文,即使是目的地是本机,也需要经过本机的网络协议层,所以本机通讯肯定是通过API进入了内核,并且完成了路由选择。【比如本机的TCP通信,也必须要socket通信的基本要素:src ip port dst ip port】


    如果要使用tcpdump抓取其他主机MAC地址的数据包,必须开启网卡混杂模式,所谓混杂模式,用最简单的语言就是让网卡抓取任何经过它的数据包,不管这个数据包是不是发给它或者是它发出的。一般而言,Unix不会让普通用户设置混杂模式,因为这样可以看到别人的信息,比如telnet的用户名和密码,这样会引起一些安全上的问题,所以只有root用户可以开启混杂模式,开启混杂模式的命令是:ifconfig en0 promisc, en0是你要打开混杂模式的网卡。


    Linux抓包原理:


    Linux抓包是通过注册一种虚拟的底层网络协议来完成对网络报文(准确的说是网络设备)消息的处理权。当网卡接收到一个网络报文之后,它会遍历系统中所有已经注册的网络协议,例如以太网协议、x25协议处理模块来尝试进行报文的解析处理,这一点和一些文件系统的挂载相似,就是让系统中所有的已经注册的文件系统来进行尝试挂载,如果哪一个认为自己可以处理,那么就完成挂载。

    当抓包模块把自己伪装成一个网络协议的时候,系统在收到报文的时候就会给这个伪协议一次机会,让它来对网卡收到的报文进行一次处理,此时该模块就会趁机对报文进行窥探,也就是把这个报文完完整整的复制一份,假装是自己接收到的报文,汇报给抓包模块。


    Wireshark是一个网络协议检测工具,支持Windows平台、Unix平台、Mac平台,一般只在图形界面平台下使用Wireshark,如果是Linux的话,直接使用tcpdump了,因为一般而言Linux都自带的tcpdump,或者用tcpdump抓包以后用Wireshark打开分析。


    在Mac平台下,Wireshark通过WinPcap进行抓包,封装的很好,使用起来很方便,可以很容易的制定抓包过滤器或者显示过滤器,具体简单使用下面会介绍。Wireshark是一个免费的工具,只要google一下就能很容易找到下载的地方。


    所以,tcpdump是用来抓取数据非常方便,Wireshark则是用于分析抓取到的数据比较方便。


    3 tcpdump使用


    3.1 语法


    1. 类型的关键字


      host(缺省类型): 指明一台主机,如:host 210.27.48.2

      net: 指明一个网络地址,如:net 202.0.0.0

      port: 指明端口号,如:port 23


    2. 确定方向的关键字


      src: src 210.27.48.2, IP包源地址是210.27.48.2

      dst: dst net 202.0.0.0, 目标网络地址是202.0.0.0

      dst or src(缺省值)

      dst and src


    3. 协议的关键字:缺省值是监听所有协议的信息包


      fddi

      ip

      arp

      rarp

      tcp

      udp


    4. 其他关键字


      gateway

      broadcast

      less

      greater


    5. 常用表达式:多条件时可以用括号,但是要用转义


      非 : ! or “not” (去掉双引号)

      且 : && or “and”

      或 : || or “or”

    3.2 选项




    3.3 命令实践


    1、直接启动tcpdump,将抓取所有经过第一个网络接口上的数据包




    2、抓取所有经过指定网络接口上的数据包




    3、抓取所有经过 en0,目的或源地址是 10.37.63.255 的网络数据:




    4、抓取主机10.37.63.255和主机10.37.63.61或10.37.63.95的通信:




    5、抓取主机192.168.13.210除了和主机10.37.63.61之外所有主机通信的数据包:




    6、抓取主机10.37.63.255除了和主机10.37.63.61之外所有主机通信的ip包




    7、抓取主机10.37.63.3发送的所有数据:




    8、抓取主机10.37.63.3接收的所有数据:




    9、抓取主机10.37.63.3所有在TCP 80端口的数据包:




    10、抓取HTTP主机10.37.63.3在80端口接收到的数据包:




    11、抓取所有经过 en0,目的或源端口是 25 的网络数据




    12、抓取所有经过 en0,网络是 192.168上的数据包




    13、协议过滤




    14、抓取所有经过 en0,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 数据




    15、抓取所有经过 en0,目标 MAC 地址是 00:01:02:03:04:05 的 ICMP 数据




    16、抓取所有经过 en0,目的网络是 192.168,但目的主机不是 192.168.1.200 的 TCP 数据




    17、只抓 SYN 包




    18、抓 SYN, ACK




    19、抓 SMTP 数据,抓取数据区开始为”MAIL”的包,”MAIL”的十六进制为 0x4d41494c




    20、抓 HTTP GET 数据,”GET “的十六进制是 0x47455420



    21、抓 SSH 返回,”SSH-“的十六进制是 0x5353482D




    22、高级包头过滤如前两个的包头过滤,首先了解如何从包头过滤信息:




    23、抓 DNS 请求数据




    24、其他-c 参数对于运维人员来说也比较常用,因为流量比较大的服务器,靠人工 CTRL+C 还是抓的太多,于是可以用-c 参数指定抓多少个包。




    3.4 抓个网站练练


    想抓取访问某个网站时的网络数据。比如网站 http://www.baidu.com/ 怎么做?


    1、通过tcpdump截获主机www.baidu.com发送与接收所有的数据包




    2、访问这个网站




    3、想要看到详细的http报文。怎么做?




    4、分析抓取到的报文




    4 tcpdump抓取TCP包分析


    TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址、目的IP地址,以及TCP数据报首部的源端口地址和目的端口地址。TCP首部结构如下:



    注意:通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手


    其中在TCP连接和断开连接过程中的关键部分如下:


    1. 源端口号:即发送方的端口号,在TCP连接过程中,对于客户端,端口号往往由内核分配,无需进程指定;

    2. 目的端口号:即发送目的的端口号;

    3. 序号:即为发送的数据段首个字节的序号;

    4. 确认序号:在收到对方发来的数据报,发送确认时期待对方下一次发送的数据序号;

    5. SYN:同步序列编号,Synchronize Sequence Numbers;

    6. ACK:确认编号,Acknowledgement Number;

    7. FIN:结束标志,FINish;

    4.1 TCP三次握手


    三次握手的过程如下:



    step1. 由客户端向服务器端发起TCP连接请求。Client发送:同步序列编号SYN置为1,发送序号Seq为一个随机数,这里假设为X,确认序号ACK置为0;

    step2. 服务器端接收到连接请求。Server响应:同步序列编号SYN置为1,并将确认序号ACK置为X+1,然后生成一个随机数Y作为发送序号Seq(因为所确认的数据报的确认序号未初始化);

    step3. 客户端对接收到的确认进行确认。Client发送:将确认序号ACK置为Y+1,然后将发送序号Seq置为X+1(即为接收到的数据报的确认序号);


    1. 为什么是三次握手而不是两次对于step3的作用,假设一种情况,客户端A向服务器B发送一个连接请求数据报,然后这个数据报在网络中滞留导致其迟到了,虽然迟到了,但是服务器仍然会接收并发回一个确认数据报。但是A却因为久久收不到B的确认而将发送的请求连接置为失效,等到一段时间后,接到B发送过来的确认,A认为自己现在没有发送连接,而B却一直以为连接成功了,于是一直在等待A的动作,而A将不会有任何的动作了。这会导致服务器资源白白浪费掉了,因此,两次握手是不行的,因此需要再加上一次,对B发过来的确认再进行一次确认,即确认这次连接是有效的,从而建立连接。


    2. 对于双方,发送序号的初始化为何值有的系统中是显式的初始化序号是0,但是这种已知的初始化值是非常危险的,因为这会使得一些黑客钻漏洞,发送一些数据报来破坏连接。因此,初始化序号因为取随机数会更好一些,并且是越随机越安全。

    tcpdump抓TCP三次握手抓包分析:


    sudo tcpdump -n -S -i lo0 host 10.37.63.3 and tcp port 8080

     

    # 接着再运行:

    curl http://10.37.63.3:8080/atbg/doc


    控制台输出:




    每一行中间都有这个包所携带的标志:


    S=SYN,发起连接标志。

    P=PUSH,传送数据标志。

    F=FIN,关闭连接标志。

    ack,表示确认包。

    RST=RESET,异常关闭连接。

    .,表示没有任何标志。


    第1行:16:00:13.486776,从10.37.63.3(client)的临时端口61725向10.37.63.3(server)的8080监听端口发起连接,client初始包序号seq为1944916150,滑动窗口大小为65535字节(滑动窗口即tcp接收缓冲区的大小,用于tcp拥塞控制),mss大小为16344(即可接收的最大包长度,通常为MTU减40字节,IP头和TCP头各20字节)。【seq=1944916150,ack=0,syn=1】


    第2行:16:00:13.486850,server响应连接,同时带上第一个包的ack信息,为client端的初始包序号seq加1,即1944916151,即server端下次等待接受这个包序号的包,用于tcp字节流的顺序控制。Server端的初始包序号seq为1119565918,mss也是16344。【seq=1119565918,ack=1944916151,syn=1】


    第3行:15:46:13.084161,client再次发送确认连接,tcp连接三次握手完成,等待传输数据包。【ack=1119565919,seq=1944916151】


    4.2 TCP四次挥手


    连接双方在完成数据传输之后就需要断开连接。由于TCP连接是属于全双工的,即连接双方可以在一条TCP连接上互相传输数据,因此在断开时存在一个半关闭状态,即有有一方失去发送数据的能力,却还能接收数据。因此,断开连接需要分为四次。主要过程如下:



    step1. 主机A向主机B发起断开连接请求,之后主机A进入FIN-WAIT-1状态;

    step2. 主机B收到主机A的请求后,向主机A发回确认,然后进入CLOSE-WAIT状态;

    step3. 主机A收到B的确认之后,进入FIN-WAIT-2状态,此时便是半关闭状态,即主机A失去发送能力,但是主机B却还能向A发送数据,并且A可以接收数据。此时主机B占主导位置了,如果需要继续关闭则需要主机B来操作了;

    step4. 主机B向A发出断开连接请求,然后进入LAST-ACK状态;

    step5. 主机A接收到请求后发送确认,进入TIME-WAIT状态,等待2MSL之后进入CLOSED状态,而主机B则在接受到确认后进入CLOSED状态;


    1. 为何主机A在发送了最后的确认后没有进入CLOSED状态,反而进入了一个等待2MSL的TIME-WAIT主要作用有两个:


      第一,确保主机A最后发送的确认能够到达主机B。如果处于LAST-ACK状态的主机B一直收不到来自主机A的确认,它会重传断开连接请求,然后主机A就可以有足够的时间去再次发送确认。但是这也只能尽最大力量来确保能够正常断开,如果主机A的确认总是在网络中滞留失效,从而超过了2MSL,最后也无法正常断开;

      第二,如果主机A在发送了确认之后立即进入CLOSED状态。假设之后主机A再次向主机B发送一条连接请求,而这条连接请求比之前的确认报文更早地到达主机B,则会使得主机B以为这条连接请求是在旧的连接中A发出的报文,并不看成是一条新的连接请求了,即使得这个连接请求失效了,增加2MSL的时间可以使得这个失效的连接请求报文作废,这样才不影响下次新的连接请求中出现失效的连接请求。


    2. 为什么断开连接请求报文只有三个,而不是四个因为在TCP连接过程中,确认的发送有一个延时(即经受延时的确认),一端在发送确认的时候将等待一段时间,如果自己在这段事件内也有数据要发送,就跟确认一起发送,如果没有,则确认单独发送。而我们的抓包实验中,由服务器端先断开连接,之后客户端在确认的延迟时间内,也有请求断开连接需要发送,于是就与上次确认一起发送,因此就只有三个数据报了。

    5 Wireshark分析tcpdump抓包结果


    1、启动8080端口,tcpdump抓包命令如下:


    tcpdump -i lo0 -s 0 -n -S host 10.37.63.3 and port 8080 -w ./Desktop/tcpdump_10.37.63.3_8080_20160525.cap

     

    # 然后再执行curl

    curl http://10.37.63.3:8080/atbg/doc


    2、使用Wireshark打开tcpdump_10.37.63.3_8080_20160525.cap文件



    No. 1-4 行:TCP三次握手环节;

    No. 5-8 行:TCP传输数据环节;

    No. 9-13 行:TCP四次挥手环节;


    3、顺便说一个查看 http 请求和响应的方法:



    弹窗如下图所示,上面红色部分为请求信息,下面蓝色部分为响应信息:



    以上是Wireshark分析tcpdump的简单使用,Wireshark更强大的是过滤器工具,大家可以自行去多研究学习Wireshark,用起来还是比较爽的。


    展开全文
  • tcpdumpwireshark的简单配合使用

    千次阅读 2018-09-15 18:36:11
    预置条件:linux上已有tcpdump客户端并有可执行...该命令是 抓8443端口的数据包或者192.168.4.5的包并生成为pcap文件,可供wireshark 使用 -i 是网卡,any 是所有网卡,也可这样子指定只抓eth0 网卡的包 ./tcpdump...

    预置条件:linux上已有tcpdump客户端并有可执行的权限

    ./tcpdump -i any -n port 8443 or host 192.168.4.5 -w test.pcap

    该命令是 抓8443端口的数据包或者192.168.4.5的包并生成为pcap文件,可供wireshark 使用

    -i 是网卡,any 是所有网卡,也可这样子指定只抓eth0 网卡的包 ./tcpdump -i eth0 -n port 8443 or host 192.168.4.5 -w eth0.pcap

    -n 是把抓包的机子信息,转化数字

    未加n的时候

    加n的时候

    后的port 和 host 都为条件,譬如有dst src 这样子的条件,条件可以根据实际情况去设置

    -w 是指定生成文件

    生成文件后,利用wireshark分析抓到的数据

    文件直接导入后。wireshark的数据包分析,Filter功能是最离不开的~

    经常用到的过滤条件:

    tcp.port 指定tcp协议,并指定是哪个端口的数据包,然后 可以多个条件 or and 等条件

    譬如 该过滤条件:

    tcp.flags.ack == 1 and tcp.port == 8045 

    tcp.flags.ack==1 指定 数据包包含ack 标志

    tcp.flags.fin == 1  数据包包含fin 标志

    在 wireshark中有 Expression 中 所有可用的过滤条件都在里面,可根据实际要求去查看,如果看不懂,请补充一下tcp 的三次握手和四次挥手以及数据包的传送

    然后还有给比较重要常用的功能follow tcp stream 

    另外补充三次握手和四次挥手的详解链接:

    https://www.cnblogs.com/thrillerz/p/6464203.html

    如果其他的内容下次补充

     

    展开全文
  • tcpdumpWireshark 分析网络流量

    目录

    再探ping

    tcpdump

    Wireshark

    参考


     

    很多情况下ping可以帮助我们定位出延迟问题,不过ping本身也会出现想不到的问题,这时候就需要抓取ping命令执行的收发的网络包,然后进行找出问题根源
    tcpdump和Wireshark就是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器

    • tcpdump仅支持命令行格式使用,常用在服务器中抓取和分析网络包
    • Wireshark除了可以抓包外,还提供了强大图形界面和汇总分析工具,在分析复杂的网络情景时,尤为简单

    因为在实际分析网络性能时,先用tcpdump抓包,后用Wireshark分析,也是一种常用方法
    安装这两个工具

    yum install -y tcpdump wireshark

    Wireshark是图形界面,并不能通过SSH使用,一般推荐用于本地机器,如Windows中安装
     


    再探ping

    ping是一种最常用的网络工具,常用来探测网络主机之间的连通性以及延迟,前面案例中也讲过DNS缓慢的案例,多次用到了ping测试DNS服务器的延迟(RTT)
    不过有时候ping工具本身也可能出现异常,比如运行缓慢,但实际网络延迟却并不大的情况
    下面是一个案例

    ping -c 3 geektime.org
    PING geektime.org (35.190.27.188) 56(84) bytes of data.
    64 bytes from 35.190.27.188 (35.190.27.188): icmp_seq=1 ttl=48 time=45.2 ms
    64 bytes from 35.190.27.188 (35.190.27.188): icmp_seq=2 ttl=48 time=45.2 ms
    64 bytes from 35.190.27.188 (35.190.27.188): icmp_seq=3 ttl=48 time=45.3 ms
    
    --- geektime.org ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2048ms
    rtt min/avg/max/mdev = 45.202/45.268/45.309/0.250 ms
    [root@iz2zege42v3jtvyj2oecuzz ~]# 

    增加下面这行命令

    iptables -I INPUT -p udp --sport 53 -m string --string googleusercontent --algo bm -j DROP

    根据ping的输出,可以发现geektime.org解析后的IP地址是 35.190.27.188,而后三次ping请求都得到了响应,延迟RTT都是45ms,但汇总的地方显示3次发送,收到了3次响应,但3次发送和接受的总时间是2048毫秒
    可能是DNS及诶的问题
    再回去看ping的输出,3次ping请求中,用的都是IP地址,说明ping只需要在最开始运行时,解析一次得到IP,后面就可以只用IP了
    再用nslookup看看

    time nslookup geektime.org
    Server:         114.114.114.114
    Address:        114.114.114.114#53
    
    Non-authoritative answer:
    Name:   geektime.org
    Address: 35.190.27.188
    
    
    real    0m0.091s
    user    0m0.006s
    sys     0m0.003s


    折执行结果很快,比2秒快多了
    这时候用tcpdump抓包看看
    再打开一个终端输入下面命令

    tcpdump -nn udp port 53 or host 35.190.27.188

    具体参数含义

    • -nn 表示不解析抓取中的域名(不反向解析),协议和端口号
    • udp port 53,表示只显示UDP协议的端口号(包括源端口和目的端口)为53的包
    • host 35.190.27.188,表示只显示IP地址(包源地址和目的地址)为35.190.27.188的包
    • 这两个过滤条件中间的or,表示或关系,只要满足上面两个条件中的任一个就可以展示出来

    再执行相同的ping命令

     ping -c 3 geektime.org
    PING geektime.org (35.190.27.188) 56(84) bytes of data.
    64 bytes from 35.190.27.188 (35.190.27.188): icmp_seq=1 ttl=48 time=45.2 ms
    64 bytes from 35.190.27.188 (35.190.27.188): icmp_seq=2 ttl=48 time=45.3 ms
    64 bytes from 35.190.27.188 (35.190.27.188): icmp_seq=3 ttl=48 time=45.4 ms
    
    --- geektime.org ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2049ms
    rtt min/avg/max/mdev = 45.281/45.353/45.429/0.253 ms

    再查看tcpdump的输出

    tcpdump -nn udp port 53 or host 35.190.27.188
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    09:51:19.574166 IP 172.17.6.131.49049 > 114.114.114.114.53: 34288+ A? geektime.org. (30)
    09:51:19.604440 IP 114.114.114.114.53 > 172.17.6.131.49049: 34288 1/0/0 A 35.190.27.188 (46)
    09:51:19.604754 IP 172.17.6.131 > 35.190.27.188: ICMP echo request, id 5591, seq 1, length 64
    09:51:19.650002 IP 35.190.27.188 > 172.17.6.131: ICMP echo reply, id 5591, seq 1, length 64
    09:51:19.650290 IP 172.17.6.131.47283 > 114.114.114.114.53: 27078+ PTR? 188.27.190.35.in-addr.arpa. (44)
    09:51:20.652404 IP 172.17.6.131 > 35.190.27.188: ICMP echo request, id 5591, seq 2, length 64
    09:51:20.697643 IP 35.190.27.188 > 172.17.6.131: ICMP echo reply, id 5591, seq 2, length 64
    09:51:21.653840 IP 172.17.6.131 > 35.190.27.188: ICMP echo request, id 5591, seq 3, length 64
    09:51:21.699106 IP 35.190.27.188 > 172.17.6.131: ICMP echo reply, id 5591, seq 3, length 64
    ^C
    9 packets captured
    9 packets received by filter
    0 packets dropped by kernel


    这次输出中,前两行,表示tcpdump的选项以及接口的基本信息
    从第三行开始,就是抓取到的网络包的输出
    这些输出格式,都是时间戳  协议 源地址 . 源端口 > 目的地址.目的端口 网络包详细信息
    网络包的详细信息,本身根据协议的不同而不同,所以要理解这些网络包的详细含义,就要对常用网络协议的基本格式以及交互原理,有基本的了解

    实际内容含义
    第一条表示,从IP发送到114.114.114.114的A记录查询请求,它的报文格式记录在RFC1035中

    • 34288+ , 表示查询标识值,它也会出现在响应中加号表示启动递归查询
    • A?     , 表示查询A记录
    • geektime.org,表示待查询的域名
    • 30     , 表示报文长度

    第二条是从114.114.114.114发送回来的DNS响应--域名geektime.org. 的A记录值为35.190.27.188
    第三第四条,是ICMP echo request和ICMP echo reply,响应包的时间戳,减去请求包的时间戳,就可以得到这次ICMP的响应时间
    但随后两条反向地址解析PTR请求,就比较可以可疑,发送和响应时间有1秒了
    再往下的四个包,都是两次正常的ICMP请求和响应
    到这里,就找到了ping缓慢的根源,正是这次PTR请求查询导致变慢的
    PRT反向地址解析的目的,是从IP地址反查出域名,但事实上,并非所有IP地址都会定义PTR记录,所以PTR查询可能会失败

    所以,在使用ping时,发现结果中的延迟并不大,而ping本身很慢,可能是背后的PTR在搞鬼
    解决办法是直接禁用PTR查询就可以了,加上 -n 选项禁止名称解析
    新的执行命令如下

    ping -n -c 3 geektime.org
    PING geektime.org (35.190.27.188) 56(84) bytes of data.
    64 bytes from 35.190.27.188: icmp_seq=1 ttl=48 time=45.2 ms
    64 bytes from 35.190.27.188: icmp_seq=2 ttl=48 time=45.3 ms
    64 bytes from 35.190.27.188: icmp_seq=3 ttl=48 time=45.2 ms
    
    --- geektime.org ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2002ms
    rtt min/avg/max/mdev = 45.277/45.298/45.326/0.246 ms
    
    
    #tcpdump中可以看到,已经没有PTR查询了
    tcpdump -nn udp port 53 or host 35.190.27.188
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    10:12:30.994062 IP 172.17.6.131.49396 > 114.114.114.114.53: 27899+ A? geektime.org. (30)
    10:12:31.026251 IP 114.114.114.114.53 > 172.17.6.131.49396: 27899 1/0/0 A 35.190.27.188 (46)
    10:12:31.026625 IP 172.17.6.131 > 35.190.27.188: ICMP echo request, id 5634, seq 1, length 64
    10:12:31.071886 IP 35.190.27.188 > 172.17.6.131: ICMP echo reply, id 5634, seq 1, length 64
    10:12:32.028093 IP 172.17.6.131 > 35.190.27.188: ICMP echo request, id 5634, seq 2, length 64
    10:12:32.073377 IP 35.190.27.188 > 172.17.6.131: ICMP echo reply, id 5634, seq 2, length 64
    10:12:33.029578 IP 172.17.6.131 > 35.190.27.188: ICMP echo request, id 5634, seq 3, length 64
    10:12:33.074812 IP 35.190.27.188 > 172.17.6.131: ICMP echo reply, id 5634, seq 3, length 64

    这样就解决了一个最常见的ping工作缓慢的问题
    最后删除iptables命令

    iptables -D INPUT -p udp --sport 53 -m string --string googleusercontent --algo bm -j DROP

    为什么案例中要根据googleusercontent过滤
    实际上,如果换一个DNS服务器,就可以用PTR反查到35.190.27.188所对应的域名

    nslookup -type=PTR 35.190.27.188 8.8.8.8
    Server:         8.8.8.8
    Address:        8.8.8.8#53
    
    Non-authoritative answer:
    188.27.190.35.in-addr.arpa      name = 188.27.190.35.bc.googleusercontent.com.
    
    Authoritative answers can be found from:

    虽然查到了PTR记录,但结果并非 geekbang.org,而是 188.27.190.35.bc.googleusercontent.com.
    这也就是为什么,案例开始将包含 googleusercontent 包丢弃,会导致超时,因为iptables把PTR响应丢弃了,所以会导致PTR请求超时,所以会慢

    根据IP地址反查域名,根据端口号反查协议名称,是很多网络工具的默认行为,而这往往会导致性能工具的工作缓慢,所以网络性能工具都会提供一个选项如-n或者-nn,来禁止名称解析

     

    tcpdump

    tcpdump也是最常用的一个网络分析工具,它基于 libpcap,利用内核中的AF_PACKET套接字,抓取网络接口中传输的网络包,并提供了强大的过滤规则
    tcpdump展示了每个网络包的详细信息,具体可以参考RFC
    tcpdump的基本用法就是 tcpdump [选项] [过滤表达式],这两个都是可选的

    tcpdump手册,以及pcap-filter手册,会发现tcpdump提供了大量的选项以及各式各样的过滤表达式,下面总结了一些常用的选项

    接下来,再看常用的过滤表达式,总结图表如下


    再次强调tcpdump的输出格式

    时间戳 协议 源地址.源端口 > 目的地址.目的端口 网络包详细信息

    网络包的详细信息取决于协议,不同协议展示的格式也不同,所以更详细的使用方法,需要去查tcpdump的man手册,虽然tcpdump功能强大,但输出格式并不直观,特别是网络包很多的时候,想从tcpdump中抓取网络包再分析就有难度了,这时候就需要借助Wireshark了
     

    Wireshark


    Wireshark最大的好处是提供跨平台的图形界面
    使用下面命令,将抓取的网络包保存到ping.pcap文件中

    tcpdump -nn udp port 53 or host 35.190.27.188 -w ping.pcap

    再把这个文件拷贝到本地机器,并用Wireshark打开

    打开编号为5的数据包


    用访问HTTP的例子,演示TCP三次握手和四次挥手
    访问 http://example.com
    先查出对应的ip,并执行访问,命令如下

    dig +short example.com
    93.184.216.34
    
    curl http://example.com
    
    tcpdump -nn host example.com -w web.pcap

    将web.pcap文件导出,并用Wireshark打开,可以看到三次握手,四次挥手,HTTP数据交互的过程

    在Wireshark中点击 Statistics->Flow Graph,然后选择TCP Flows,可以看到整个TCP流的执行过程

    作为对比,完整的TCP三次握手,四次挥手如下

    不过Wireshark中关闭连接只有三个包
    因为服务器收到客户端FIN后,服务器自己也要关闭连接,所以把ACK和FIN合并到一起发送,节省了一个包,就变成了三次挥手
    而通常情况下,服务器收到客户端的FIN厚,很可能还没发送完数据,所以就会先回复客户端一个ACK包,稍等一会,完成所有数据包的发送后,才会发送FIN包,这就是四次挥手了
     

     

    参考

    RFC

    RFC 1035 DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION

    展开全文
  • 1.Linux 环境安装tshare wiresharek tcpDump yum groupinstall “X Window System” yum groupinstall “GNOME Desktop” yum search wireshark yum install -y wireshark-gnome yum install -y tcpdump 2. wget ...

    1.Linux 环境安装tshare wiresharek tcpDump

    yum groupinstall “X Window System”
    yum groupinstall “GNOME Desktop”
    yum search wireshark
    yum install -y wireshark-gnome
    yum install -y tcpdump

    2. wget https://www.baidu.com 访问http

    3.一次http请求 发生数据交换列表

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

    位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

    4 tcpdump tshark wireShark 抓包分析是这个连接的第几个请求

    tcpdump -i eth0 -w test001.cap
    4.进行ip、端口、http头等的显示过滤

    展开全文
  • Linux TcpDump Wireshark文件导出

    千次阅读 2015-10-20 15:59:33
    tcpdump -i eth0 -s 0 -w 文件名.pcap
  • TcpdumpWireshark 的结合使用(一)

    千次阅读 2015-11-18 13:03:07
    1.TcpdumpWireshark的简介 (1)Tcpdump  我们用尽量简单的话来定义tcpdump,就是:dump the traffice on anetwork.,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员...
  • 下午调试crawlermanager时,成同学反映:client...不放心,就使用tcpdump抓了一下包,然后使用wireshark进行分析,成功定位了问题。 (1)运行tcpdump: tcpdump -s 0 -c 100 dst host 109.119.20.82 -w ./ta...
  • 详解使用tcpdump wireshark对Android应用程序进行抓包并分析
  • Tcpdump & Wireshark

    2012-06-05 22:56:42
    Tcpdump工具的详细说明以及实例说明,Wireshark 1.6.8工具以及中文使用文档。
  • 一般远程抓包的方法是,首先在远程服务器端安装tcpdump,通过tcpdump在远端抓取一部分数据包后,再回传到本地,然后使用wireshark进行分析。这种操作存在两个问题:一方面是抓取的数据包不是实时的,不能做实时数据...
  • tcpdump抓包wireshark分析

    千次阅读 2018-07-10 15:46:49
    分别转自https://www.cnblogs.com/senlinmilelu/p/6876650.html 和https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html简介用简单的话来定义tcpdump,就是:dump the traffic on a network,根据...
  • #启动nginx ./nginx 在这里已经完成了,如果有报错,请查看log日志 2.Tcpdump 介绍 tcpdump是Linux自带的抓包工具,可以详细看到计算机通信中详细报文内容,如果读者熟悉另一款强大的抓包工具wiresharktcpdump相当...
  • 有没有办法把tcpdumpwireshark这两个软件结合起来使用呢??? 办法当然是有的,把tcpdump抓取的数据转存文件,然后用wireshark打开文件,分析数据. 1.开启tcpdump抓包,并将结果转存为文件 tcpdump tcp -s 0 port 80 -...
  • 公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !本文将展示如何使用 tcpdump 抓包,以及如何用 tcpdumpwireshark 分析网络流...
  • tcpdumpwireshark 抓包比较

    千次阅读 2013-04-09 23:15:53
    1. Wiresharktcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话,我直接用tcpdump了,因为我工作环境中的Linux一般只有字符...
  • WiresharkTcpDump抓包分析心得

    千次阅读 2018-11-16 13:50:32
     Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话,我直接用tcpdump了,因为我工作环境中的Linux一般只有字符界面,且一般而言Linux都...
  • 1.tcpdumpWireshark介绍 1.1tcpdump 在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大。它是基于Unix系统的命令行式的数据包嗅探工具,可以抓取...
  • tcpdump抓包命令和wireshark抓包分析

    万次阅读 多人点赞 2018-09-03 16:59:59
    tcpdump抓包命令 tcpdump 的抓包保存到文件的命令参数是-w xxx.cap 抓eth1的包 tcpdump -i eth1 -w /tmp/xxx.cap 抓 192.168.1.123的包 tcpdump -i eth1 host 192.168.1.123 -w /tmp/xxx.cap 抓192.168.1.123的...
  • wireshark+tcpdump+ssh远程抓包并实时显示 plink.exe -ssh root@10.0.0.2 -pw dev2021 "tcpdump -i eth1 -s 0 -l -w -" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -
  • sudo tcpdump -i eth0 -A -s 0 'tcp port 11191' -vvv -w /home/admin/hello.cap 注释: eth0 -为指定的网卡 11191-为指定的端口 hello.cap-为端口的数据写入到该文件 在Wireshark打开hello.cap文件...
  • tcpdump wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍 标签:网络tcpdst工具windowslinux 2012-05-15 18:123777人阅读评论(0)收藏举报 分类: linuxwindows系统工具(7) ...
  • 几款抓包工具tcpdumpwireshark、tshark的简单介绍 http://tshare365.com/archives/1295.html
  • 熟练使用wireshark来trouble shooting需要对各种网络协议都要有比较深的认识。本文对日常用到的一些技能技巧进行总结,方便各位看官入门,然后深入。 命令介绍 1.tcpdump 就是:dump the traffic on a network。根据...
  • tcp抓包命令:tcpdump -s 0 -i any -vvv -w /tmp/1.pcap wireshark 查看2个IP之间的网络时延: 菜单栏 Statistics→TCP Stream Graph→Round Trip time 效果如下: 往返时间(round-trip time, RTT)是指一个...
  • tcpdumpwireshark

    2019-09-24 02:04:22
    在解决网络问题时,经常需要通过监控...两者通常结合使用,tcpdump抓取的数据包保存为可分析文件,然后在windows系统通过wireshark进行分析。 tcpdump命令需要使用-w ‘保存文件’。 转载于:https://www.cnblogs...
  • 最近通过报警发现应用频繁有超过1s的慢请求,通过查看日志、tcpudmp和wireshark最后定位是网络问题,在排查过程中也参考了网上的很多文章,但是写的都不是全,现在有空分享一下问题排查的一些经验,希望对遇到类似...
  • WiresharkTcpDump抓包分析对比

    千次阅读 2015-04-16 09:39:13
    常见的抓包分析工具有:微软的Network Monitor和Message Analyzer、... Expert、Wireshark和linux的tcpdump等工具 今天,做了实验测试就对比分析其中的两款,其他的大家可以百度谷歌测试一哈^_^ Wiresharktcpdump介绍

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,838
精华内容 4,735
关键字:

tcpdumpwireshark