
Mac上的rvictl可以通过iOS设备的UDID创建一个虚拟网卡,然后通过网瞳监听设备上的所有流量。
rvictl -s udid //创建虚拟网卡命令 sudo tcpdump -i rvi0 -AAl //启动tcpdump监控
经过上面的步骤成功运行tcpdump之后,接下来就可以分析输出的网络包内容了,iOS设备和Android设备的输出是一致的。我们先来解析下几个基本的格式:
再继续深入tcpdump之前,先贴上一张tcp header格式图,常看常新。
这部分我们来看下tcpdump常用的一些命令参数。文章最开始部分的tcpdump命令是这样的:sudo tcpdump -i rvi0 -AAl。 -i rvi0 -AAl都是属于参数部分。常见的有这些:
-i, 要监听的网卡名称,-i rvi0监听虚拟网卡。不设置的时候默认监听所有网卡流量。
-A, 用ASCII码展示所截取的流量,一般用于网页或者app里>
根据白帽子黑客抓包工具的使用率,将TCPdump排在第五的位置。
TCPdump
TCPdump功能很强大,能够搞到所有层的数据。Linux作为路由器和网关这种网络服务器时,就少不了数据的采集、分析工作。而TCPdump恰好是一种功能强大的网络数据采集分析工具。
简单来说就是,可以根据用户的定义来截获网络上数据包的包分析工具。
TCPdump的功能和截取策略,捕获了高级系统管理员的芳心,成为其分析和排除问题的一种必备工具。
第四名:Wireshark(网络类)
Wireshark(前称Ethereal)是一个网络封包分析软件,是最流行的一种图形化的抓包工具,而且在Windows、Mac、Linux等三种系统中都有合适的版本。
Wireshark
Wireshark可以被用来检测网络问题、资讯安全问题、学习网络协定相关的知识,或者为新的通讯协定除错。它是白帽子黑客、网络管理员、安全工作人员的必备工具之一。
第三名:>
>
它不依赖于代理服务器、网络监控工具,就可以将网页和网页请求信息、日志信息同时显示。另外,它还可以显示一些交换信息。
fiddler
第二名:Fiddler(web报文)
Fiddler是白帽子黑客最经常使用的,是可以进行>
它可以记录电脑联网的所有通讯,可以查看所有“出入”Fiddler的cookie, html, js, css等数据。并且优点是使用起来非常简单。
第一名:BurpSuite (web 报文)
BurpSuite是现在Web安全渗透的必备工具。
它是一个集成平台,平台中汇集了可以用来攻击web应用的工具,这些工具有很多接口,共享一个扩展性比较强的框架。
tcpdump 是 Linux 下的抓包工具,使用参数比较多,输出条目比较细。
tcpdump的命令行格式
tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 类型 ] [ -w 文件名 ] [表达式 ]
tcpdump的参数选项
-A:以ASCII编码打印每个报文(不包括链路层的头),这对分析网页来说很方便;
-a:将网络地址和广播地址转变成名字;
-c<数据包数目>:在收到指定的包的数目后,tcpdump就会停止;
-C:用于判断用 -w 选项将报文写入的文件的大小是否超过这个值,如果超过了就新建文件(文件名后缀是1、2、3依次增加);
-d:将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd:将匹配信息包的代码以c语言程序段的格式给出;
-ddd:将匹配信息包的代码以十进制的形式给出;
-D:列出当前主机的所有网卡编号和名称,可以用于选项 -i;
-e:在输出行打印出数据链路层的头部信息;
-f:将外部的Internet地址以数字的形式打印出来;
-F<表达文件>:从指定的文件中读取表达式,忽略其它的表达式;
-i<网络界面>:监听主机的该网卡上的数据流,如果没有指定,就会使用最小网卡编号的网卡(在选项-D可知道,但是不包括环路接口),linux 22 内核及之后的版本支持 any 网卡,用于指代任意网卡;
-l:如果没有使用 -w 选项,就可以将报文打印到 标准输出终端(此时这是默认);
-n:显示ip,而不是主机名;
-N:不列出域名;
-O:不将数据包编码最佳化;
-p:不让网络界面进入混杂模式;
-q:快速输出,仅列出少数的传输协议信息;
-r<数据包文件>:从指定的文件中读取包(这些包一般通过-w选项产生);
-s<数据包大小>:指定抓包显示一行的宽度,-s0表示可按包长显示完整的包,经常和-A一起用,默认截取长度为60个字节,但一般ethernetMTU都是1500字节。所以,要抓取大于60字节的包时,使用默认参数就会导致包数据丢失;
-S:用绝对而非相对数值列出TCP关联数;
-t:在输出的每一行不打印时间戳;
-tt:在输出的每一行显示未经格式化的时间戳记;
-T<数据包类型>:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议);
-v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv:输出详细的报文信息;
-x/-xx/-X/-XX:以十六进制显示包内容,几个选项只有细微的差别,详见man手册;
-w<数据包文件>:直接将包写入文件中,并不分析和打印出来;
expression:用于筛选的逻辑表达式;
tcpdump的表达式
表达式是一个逻辑表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。
在表达式中一般如下几种类型的关键字:
关于类型的关键字,主要包括host,net,port
例如,
host 21027482,指明 21027482是一台主机,net 202000 指明202000是一个网络地址,port 23 指明端口号是23。
如果没有指定类型,缺省的类型是host
关于传输方向的关键字:src,dst,dst or src,dst and src
例如,src 21027482 ,指明ip包中源地址是21027482 , dst net 202000 指明目的网络地址是202000 。如果没有指明方向关键字,则缺省是src or dst关键字。
关于协议的关键字:fddi,ip,arp,rarp,tcp,udp
Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。
其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
逻辑运算符关键字
非运算 'not ' '! '
与运算 'and','&&'
或运算 'or' ,'||'
这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
其他重要关键字
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater。
案例
想要截获所有21027481 的主机收到的和发出的所有的数据包:
tcpdump host 21027481
想要截获主机21027481 和主机21027482 或21027483的通信,使用命令
tcpdump host 21027481 and \(21027482 or 21027483\)
如果想要获取主机21027481除了和主机21027482之外所有主机通信的ip包,使用命令:
tcpdump ip host 21027481 and ! 21027482
如果想要获取主机21027481接收或发出的telnet包,使用如下命令:
tcpdump tcp port 23 host 21027481
输出结果介绍
下面我们介绍几种典型的tcpdump命令的输出信息
数据链路层头信息
使用命令tcpdump --e host ice
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:af:1a
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5b:46
命令的输出结果如下所示:
21:50:12847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h21933357 > icetelnet 0:0(0) ack 22535 win 8760 (DF)
分析:
21:50:12 是显示的时间
847509 是ID号
eth0 < 表示从网络接口eth0 接受该数据包
eth0 > 表示从网络接口设备发送数据包
8:0:20:79:5b:46 是主机H219的MAC地址,它表明是从源地址H219发来的数据包
0:90:27:58:af:1a 是主机ICE的MAC地址,表示该数据包的目的地址是ICE
ip 是表明该数据包是IP数据包,
60 是数据包的长度,
h21933357 > icetelnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口
ack 22535 表明对序列号是222535的包进行响应
win 8760 表明发送窗口的大小是8760
ARP包的TCPDUMP输出信息
使用命令#tcpdump arp
得到的输出结果是:
22:32:42802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析:
22:32:42 时间戳
802509 ID号
eth0 > 表明从主机发出该数据包
arp 表明是ARP请求包
who-has route tell ice 表明是主机ICE请求主机ROUTE的MAC地址
0:90:27:58:af:1a 是主机ICE的MAC地址。
TCP包的输出信息
用TCPDUMP捕获的TCP包的一般输出信息是:
src > dst: flagsdata-seqnoackwindowurgentoptions
src > dst 表明从源地址到目的地址
flags 是TCP包中的标志信息,S 是SYN标志, F(FIN), P(PUSH) , R(RST) ""(没有标记)
data-seqno 是数据包中的数据的顺序号
ack 是下次期望的顺序号
window 是接收缓存的窗口大小
urgent 表明数据包中是否有紧急指针
options 是选项
用TCPDUMP捕获的UDP包的一般输出信息是:
routeport1 > iceport2: udplenth
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth
wireshark查看
要让wireshark能分析tcpdump的包,关键的地方是 -s 参数, 还有要保存为-w文件,例如下面的例子:
/tcpdump -i eth0 -s 0 -w SuccessC2Serverpcaphost 192168120 # 抓该主机的所有包,在wireshark中过滤
/tcpdump -i eth0 'dst host 2393324212' -w rawpcap # 抓包的时候就进行过滤
wireshark的过滤,很简单的,比如:
tcpport eq 5541
ipaddr eq 19216821
过滤出来后, 用fllow tcp 查看包的内容。
其他
device eth0/eth1 entered promiscuous mode
message日志中提示:
kernel: device eth0 entered promiscuous mode
kernel: device eth0 left promiscuous mode
网卡进入了混杂模式。一般对通信进行抓包分析时进入混杂模式(tcpdump)。(默认网卡启用了混杂模式的)
关闭混杂模式:ifconfig eth0 -promisc
启用混杂模式:ifconfig eth0 promisc
TCP协议的KeepAlive机制与HeartBeat心跳包:>
如果你想要查看是否安装了tcpdump工具,可以按照以下步骤进行 *** 作:
1 打开终端(Terminal)应用程序。
2 在终端中输入以下命令:`tcpdump -v`,并按下回车键。
3 如果系统中已经安装了tcpdump工具,你会看到一些关于tcpdump的详细信息。如果没有安装,系统会提示你安装tcpdump工具。
如果你想要安装tcpdump工具,可以使用以下命令:
1 在终端中输入以下命令,以更新软件包列表:`sudo apt-get update`
2 输入以下命令,以安装tcpdump工具:`sudo apt-get install tcpdump`
3 等待安装完成后,输入命令`tcpdump -v`,以查看是否安装成功并获取tcpdump的详细信息。
需要注意的是,安装和使用tcpdump工具需要管理员权限,因此在终端中输入相关命令时,需要输入管理员密码。另外,如果你在使用时遇到问题,可以查看tcpdump的手册或网络上的相关资料,以获取更多帮助。
默认系统里边没有安装有tcpdump的,无法直接使用
这里我们可以使用yum来直接安装它
yum install -y tcpdump
如果忘记了这个软件的用法,我们可以使用 tcpdump --help 来查看一下使用方法
一般我们的服务器里边只有一个网卡,使用tcpdump可以直接抓取数据包,但是这样查看太麻烦了,所以都会添加参数来进行获取的。
例如我截取本机(19216831147)和主机114114114114之间的数据
tcpdump -n -i eth0 host 19216831147 and 114114114114
还有截取全部进入服务器的数据可以使用以下的格式
tcpdump -n -i eth0 dst 19216831147
或者服务器有多个IP 可以使用参数
tcpdump -n -i eth0 dst 19216831147 or 19216831157
我们抓取全部进入服务器的TCP数据包使用以下的格式,大家可以参考下
tcpdump -n -i eth0 dst 19216831147 or 19216831157 and tcp
从本机出去的数据包
tcpdump -n -i eth0 src 19216831147 or 19216831157
tcpdump -n -i eth0 src 19216831147 or 19216831157 and port ! 22 and tcp
或者可以条件可以是or 和 and 配合使用即可筛选出更好的结果。
本教程 *** 作环境:windows7系统、Dell G3电脑。
1、为什么dump
一般指将数据导出、转存成文件或静态形式。比如可以理解成:把内存某一时刻的内容,dump(转存,导出,保存)成文件
因为程序在计算机中运行时,在内存、CPU、I/O等设备上的数据都是动态的(或者说是易失的),也就是说数据使用完或者发生异常就会丢掉。如果我想得到某些时刻的数据(有可能是调试程序Bug或者收集某些信息),就要把他转储(dump)为静态(如文件)的形式。否则,这些数据你永远都拿不到。
2、dump转储的什么
就是将动态(易失)的数据,保存为静态的数据(持久数据)。像程序这种本来就保存在存储介质(如硬盘)中的数据,也就没有必要dump。
现在,dump作为名词也很好理解了,一般特指上述过程中所得到的文件或者静态形式。就是指dump(动词)的结果文件。
常出现dump的场景:Unix/Linux中的coredump,Java中的headdump和threaddump,还有就是tcpdump工具。
tcpdump用于捕获和分析网络流量。系统管理员可以使用它来查看实时流量或将输出保存到文件中并在以后进行分析。下面列出6个常用选项
-D 选项
tcpdump的-D获取接口设备列表。看到此列表后,可以决定要在哪个接口上捕获流量。它还告诉你接口是否已启动、正在运行,以及它是否是环回接口,如下所示:
[root@localhost ~]# tcpdump -D1ens160 [Up, Running]2lo [Up, Running, Loopback]3any (Pseudo-device that captures on all interfaces) [Up, Running]4bluetooth-monitor (Bluetooth Linux Monitor) [none]5nflog (Linux netfilter log (NFLOG) interface) [none]6nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]7usbmon0 (All USB buses) [none]8usbmon1 (USB bus number 1)9usbmon2 (USB bus number 2)
-c [数字]选项
-c 选项捕获 X 个数据包,然后停止。否则,tcpdump 将无限地继续运行。因此,当只想捕获一小部分数据包样本时,可以使用此选项。但是如果接口上没有数据流量,tcpdump 会一直等待。
[root@localhost ~]# tcpdump -c 5 -i any
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
17:33:47713379 IP localhostlocaldomainssh > 19216843139970: Flags [P], seq 714380127:714380371, ack 1854022435, win 388, length 244
17:33:47713785 IP localhostlocaldomain36821 > _gatewaydomain: 36365+ PTR 143168192in-addrarpa (43)
17:33:47713939 IP 19216843139970 > localhostlocaldomainssh: Flags [], ack 244, win 4104, length 0
17:33:47716053 IP _gatewaydomain > localhostlocaldomain36821: 36365 NXDomain 0/1/0 (78)
17:33:47716543 IP localhostlocaldomain57441 > _gatewaydomain: 61445+ PTR 13143168192in-addrarpa (45)
5 packets captured
9 packets received by filter
0 packets dropped by kernel
-n 选项
-n选项不将IP地址解析为域名,直接以IP地址显示:
[root@localhost ~]# tcpdump -c 5 -i any -n
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
17:36:38980756 IP 19216843131ssh > 19216843139970: Flags [P], seq 714383039:714383283, ack 1854024303, win 388, length 244
17:36:38981032 IP 19216843131ssh > 19216843139970: Flags [P], seq 244:440, ack 1, win 388, length 196
17:36:38981096 IP 19216843131ssh > 19216843139970: Flags [P], seq 440:604, ack 1, win 388, length 164
17:36:38981153 IP 19216843131ssh > 19216843139970: Flags [P], seq 604:768, ack 1, win 388, length 164
17:36:38981208 IP 19216843131ssh > 19216843139970: Flags [P], seq 768:932, ack 1, win 388, length 164
5 packets captured
5 packets received by filter
0 packets dropped by kernel
>
以上就是关于Tcpdump使用全部的内容,包括:Tcpdump使用、有哪些抓包工具、如何读懂tcpdump的输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)