WebRTC源码研究(24)网络分析工具tcpdump和wireshare 使用

WebRTC源码研究(24)网络分析工具tcpdump和wireshare 使用

1. 网络协议分析

之前向大家介绍了很多基本的网络知识,包括NAT穿越原理NAT类型STUN的协议头协议体,然后这个TURN协议还有给我介绍的ICE,那么接下来这么多知识之后呢,我们只是一个理论层面的,真实的网络,是不是按照这个协议是一步一步走呢,其实我们并不知道,那么现在呢,我们就通过这个工具来抓取网络包,看一看是不是这个数据包是按照我们之前所讲的协议给一步步来的。

常用工具

  • Linux服务端用tcpdump

  • 其他端 WireShark

我们要抓取这个网络包去进行分析那首先要有非常好的工具,那么在整个儿这个做网络分析的这个领域呢实际上两个工具是最为重要的,那第一个是这个tcpdump,那一般tcpdump是在linux下工作同学经常使用的,那这个工具呢可以说是一个最强大的一个网络分析工具了,它可以做各种各样的分析,但是呢,他对这个用户的要求也比较高,就是说你必须对各种网络协议非常的了解,非常的熟悉,那么这个时候呢你用这个工具就特别方便,但是如果你对网络不熟悉的话那你看到满屏的那种二进制的数据,所以就是一脸茫然,这个起点是比较高的,那么另外一个工具呢就是WireShark,那个WireShark基本上在所有的有界面儿的这个操作系统上都是可以安装的什么mac呀windows啊包括linux的这个桌面版都可以安装这个WireShark。

这WireShark的好处就是它的起点会低一些,它有一个界面,您可以看到网络的每一层链路层,ip层,tcp层或者udp层再往上Http层都可以看到,而且它包含了很多的这个上层的协议,都比较全,那大家就看起来呢就会方便一些,所以还有很多同学呢是使用tcpdump在服务器上抓取数据,然后把这些数据拷到这个终端来然后再通过WireShark进行分析,这也是一种常见的一种做法,但真正的这个网络分析的高手肯定是直接用tcpdump通过grape的搜索就可以做各种各样的分析,包括写一些这个shell脚本儿啊,那么我们这堂课呢,最主要的因为是一个入门级的,所以呢主要讲的是WireShark,会将WireShark的一些基本的用法给大家讲通过这些基本用法给大家讲到,通过基本用法的一个组合大家可以组合成各种高级的这个用法。

WireShark这个功能也是非常强大的,但用好了其实也不是特别容易,但要需要经常用,那么下面呢,我们就来一个看一下,对于这些工具怎么用,第一个tcpdump,那么我们可以介绍一个最简单的一个命令,

tcpdump -i eth0 src port 80 -xx -Xs 0 -w test.cap

那这条命令呢,看起来挺长,其实我们分解一下

-i: 指定网卡

src: 指明包的来源

port: 指明端口号

-xx: 指抓到的包以16进制显示

-X: 指以ASCII码显示

-s 0 指明抓整个包

-w: 写到文件中

就比较简单了,但第一个-i eth0,这就是我们网卡的名字,因为我们的这个机子上有可能有多块网卡,但一般情况下呢,有WiFi对吧,有这个物理链路这个网卡,那可能还有其他的这个网卡,那你想对哪块儿网卡进行这个采集数据呢?那你就指定哪块儿就通过哪个呢,就通过-i来指定你的网卡,再下边儿的src就指明包的来源,就是source,您可以指定这个IP,也可以指定这个port,在我们这里呢,是指定的port,原端口是80,是我在发送的时候,它的端口是80,接收的,通过这个另外的这个参数设置就DSP的目的端口是多少,对吧,所以有两个,一个是src一个DSP。这个都是成对出现的,那么端口儿呢就是有可能是原端口,有可能是目的端口,原端口儿又包括了tcp端口和udp的端口,目的端口也分UDP跟TCP,这里并没有对协议做限制,只是说我要查看某个端口的就是如果打开了udp跟tcp两种端口,那就同时去抓取,那-xx就是抓取的包儿在我们的这个控台上十六进制的那个显示,它内容以十六进制,-X是同时还显示ASCII码就人类可读的这种方式显示,但是尤其是我们HTTP的这些请求了,它很多都是ASCII可以识别出来的,当我们用-X的时候,就看的清楚,小写的s就是我们的smap后面如果是0的话,说明你这个整个的抓取的包是无限制的,就是将整个数据包抓去到,你可以给它限制,比如说限制1500字节或者说你限制这个一个头比如说是60字节,或者是看那个头部是什么,-w就是说让他写到文件write,写到文件中所以提出这样一个分析呢,就大家就比较清楚了,实际这句话的意思就是说采集这个eth0这块网卡的这个数据对所有采集的数据呢进行过滤,怎么过滤呢,就是它的原端口号是80的得过滤出来,过滤出来之后显示的是以-xx以十六进制了,并且呢还加上一个ASCII人类可读的这种方式显示,那么这个包的大小是多少呢?完整的包抓取到,那么最终呢将它写到test.cap上,这个就比较简单。

2. tcpdump和wireshare 使用

打开控制台命令行,我这个是MAC,在Linux下是同样的

输入sudo -i 获取权限

紧接着输入ifconfig,我们去查看一下网卡,其中工作的是这个,你也可以看一下自己的是哪个,在我这里是en1

在这里插入图片描述

输入命令抓取en1网卡的数据,

输入src过滤,比如我这里ip地址,源是 192.168.1.6

-xx 表示十六进制

-Xs X表示ACISS码 s表示全部数据

sudo tcpdump -i en1 src 192.168.1.6 -xx -Xs 0

在这里插入图片描述

这时候我们看到数据就抓到了

在这里插入图片描述

这表示从192.168.1.6的IP地址,端口是50043, 到这个域名 hkg12s11-in-f10.1e100.net.https,Flags发送的内容,这是一个TCP的,它的sequence是3888877616, 窗口大小是65535, 所以的参数都在这里了,如果你对整个协议非常熟悉的话,你就知道这是什么意思

它的十六进制实际上就是这些,还包括了头和体

在这里插入图片描述

这样的话我们还可以加一个w写到test.cap,这个cap,这个.cap文件是可以用WireShark读出来的

sudo tcpdump -i en1 src 192.168.1.6 -xx -Xs 0 -w test.cap

这个时候就开始抓取数据,然后我们按control+C,

输入

ls test.cap

使用vim打开

vim test.cap

在这里插入图片描述

我们可以看到二进制文件,什么也看不清

在这里插入图片描述

我们输入

:%!xxd

这就表示以16进制的方式将它打开了

在这里插入图片描述

输入

:q!

其实这样的数据我们很难看明白,但是如果我用WireShark就比较清楚了,

我们用WireShark打开test.cap文件

其中

Time时间点、

Source源、

Destination目的地址、

Protocol协议、

SrcPort源端口号、

DstPort目的端口、

Length长度、

info具体内容
在这里插入图片描述

所以这就是WireShark,WireShark要比tcpdump好用很多

这里是TCP的SYN和ACK,也就是一去一回请求握手,这就是TCP

这里我们就不作过多的讲解了

WireShark中的逻辑运算
我先看一下WireShark包括哪些逻辑运算,这样我们就能进行各种复杂的组合了

与或非
与: and 或 &&

或: or 或 ||

非: not 或!

判断语句
等于:eq 或 ==

小于:lt 或 <

大于:gt 或 >

小于等于: le 或 <=

大于等于: ge 或 >=

不等于:ne 或 !=

这就是WireShark基本的判断语句,有了这些之后,加上WireShark的一些过滤方法可以组合成非常复杂的过滤条件了。

WireShark按协议过滤
stun

tcp

udp

我们打开WireShark这里包括所有的网卡

在这里插入图片描述

在这里插入图片描述

如果主界面找不到网卡,我们可以点击齿轮查看详情,这里可以看到每一个网卡,选中以后,点击开始监控

在这里插入图片描述

这样就能看到很多数据了,这样我们要按照协议去

这样我们要按照协议去抓取数据,比如说输入stun协议,这时候我们是没有任何stun数据的

在这里插入图片描述

大家可以打开下列网址(如果打不开你要自己想办法啊)

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

这个工具里会有一些ICE Server,大家可以点击下面的Gather candidates按钮升级所有的候选者,这时候他就会去向turn服务去发数据,这时候我本地的地址以及映射后的地址还有中继的地址都可以捕获到
在这里插入图片描述

在这里插入图片描述

其中host表示本机地址,

srflx表示映射的地址,映射后的地址表示本地地址出外网,映射后的地址是223.72.62.101,端口是15945,

relay表示中继地址,39.105.185.198表示在turn服务上开通的一个中继地址,端口是50447,

通过这几个我们就可以看的很清楚

这个时候我们通过网络抓取可以看到很多数据
在这里插入图片描述

首先我们看到一个Bingding Request,它的协议是STUN协议,点开我们可以看到Message Type就是0x0001就是Bing Request,

它有Length字段,Length是 0所以它的内容就没有,它只有一个包头,Message Cookie是2112a442,在RFC5389里面我们介绍过这个,还有一个Message Transaction ID表示事务ID,

在这里插入图片描述

这是请求

下面我们再看看响应

也就是说从192.168.1.6我本机,目的地址是39.105.180.98向这台机子发送了一个Bingding 请求,发送的这个事务ID是4666446f 4875796a344b4754,

这里同样的事务ID4666446f 4875796a344b4754给予了回复

在这里插入图片描述

这些回复的是0x0101,并且显示成功响应,长度是68,点开Attributes,

包括了映射地址
在这里插入图片描述

我们点开Attribute Type,这里面显示内容是TLV格式,T就是代表类型,后面的长度是8,代表的是一个IP地址和端口,

在这里插入图片描述

MAPPED-ADDRESS属性长度也是8, RESPONSE-ORIGIN属性也是8,一共长度就是24个字节

在这里插入图片描述

SOFTWARE是26

在这里插入图片描述

24加26就是50个字节,这个26是内容,前面两个是4个字节,四四十六,这每一个都是 16,最后还有个padding 2个字节,所以这样就组成了68个字节的包体长度。

所以大家这里就可以看到,我们此前说STUN协议的时候,发送的请求是 0x0001,响应的应该是0x0101。

我们的TURN协议是在STUN协议之上的,所以这里我们也会看到Allocate Request UDP,这是发送了一个分配服务的一个请求,我们记一下这里的事务ID

我们在看响应,是同一个事务ID表示同一个会话,这个Message Type回了一个 0x0113 是个错误,0x0001是绑定请求,0x0002表示加密信息,0x0003表示Allocate,这一次是失败了。

紧接着又发送了一次,这一次成功了

这次回复了一个0x0103,这是一个成功的消息,所以这次在TURN服务上,就把中转服务给开通了。


那么通过WireShark这种分析我就能将之前介绍的协议完全连在一起,说明我们的协议是没有任何问题的。

当然也可以抓取TCP协议或者UDP协议 ,直接在WireShark上面写就可以了。比如我们抓取一些udp

输入栏显示绿色表示抓取条件是对的,红色表示抓取条件是错误的

我们用的STUN协议、DNS都是UPD的,如果我们输入TCP,那些显示STUN的那些都没有了。

这是按协议过滤。

WireShark按IP过滤
ip.dst == 192.168.1.2

ip.dst表示过滤是目的ip,也就是发到192.168.1.2的

ip.src == 192.168.1.2

表示源ip,表示发送端是192.168.1.2

ip.addr == 192.168.1.2

ip.addr表示指定ip,不管是源ip还是目的ip,只要是这个ip地址就可以过滤掉

我们来尝试一下

这就是按ip过滤

WireShark按端口过滤
按照tcp,因为端口实际是定位到应用层了,就是ip层是没有端口的,那tcp是有端口的,udp也有端口

tcp.port == 8080

udp.port == 3478

udp.dtsport == 3478

udp.dtsport表示源端口

udp.srcport == 3478

udp.srcport表示目的端口

我们尝试下

WireShark按长度过滤
udp.length < 30

udp.length < 30

http.content_length < 30

那以上就是WireShark基本的用法。我们讲了与或非和判断语句,还有按协议、Ip、端口、长度、内容过滤,当然对内容来说就涉及到更高级的用法了。可以慢慢摸索。前面的这些只要掌握了,就可以做我们这边简单的网络数据分析了。

我们也可以写一个组合来进行过滤,比如说

大家可以按自己需要写各种个样的过滤条件

这样我们就可以做各种分析,后面我们会经常用到这个 WireShark去查一下协议的数据发送。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值