原文:
https://kunnan.blog.csdn.net/article/details/114310538
抓取http/https的,推荐使用Charles;如果是socket,推荐使用Wireshark
flags位于tcp header的第十四个字节,包含8个比特位,也就是上图的CWR到FIN。
这8个比特位都有特定的功能用途,分别是:CWR,ECE,URG,ACK,PSH,RST,SYN,FIN。
<!-- CWR((Congestion Window Reduced)) ,ECE 两个flag是用来配合做congestion control; -->
发送方的包ECE(ECN-Echo)为0的时候表示出现了congestion,
接收方回的包里CWR(Congestion Window Reduced)为1表明收到congestion信息并做了处理。
<!-- URG URG代表Urgent,表明包的优先级高,需要优先传送对方并处理。像我们平时使用terminal的时候经常ctrl+c来结束某个任务,这种命令产生的网络数据包就需要urgent。 -->
<!-- ACK:用来告诉对方上一个数据包已经成功收到。在下一个要发送的packet里设置ack位,这属于tcp的优化机制 -->
参见delayed ack:https://en.wikipedia.org/wiki/TCP_delayed_acknowledgment
<!-- PSH Push接收方接收到P位的flag包需要马上将包交给应用层处理 -->
一般我们在http request的最后一个包里都能看到P位被设置。
<!-- RST Reset位,表明packet的发送方马上就要断开当前连接了。 -->
在http请求结束的时候一般可以看到一个数据包设置了RST位。
<!-- SYN位在发送建立连接请求的时候会设置,我们所熟悉的tcp三次握手就是syn和ack位的配合:syn->syn+ack->ack。 -->
<!-- FIN Finish位设置了就表示发送方没有更多的数据要发送了,之后就要单向关闭连接了,接收方一般会回一个ack包。接收方再同理发送一个FIN就可以双向关闭连接了。 -->
<!-- ps:[S],[P],[R],[F],[.]; -->
[.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack
rvictl -s udid,创建虚拟网卡
sudo tcpdump -i rvi0 -AAl
-i, 要监听的网卡名称,-i rvi0监听虚拟网卡。不设置的时候默认监听所有网卡流量。
-A, 用ASCII码展示所截取的流量,一般用于网页或者app里http请求。-AA可以获取更多的信息。
-X,用ASCII码和hex来展示包的内容,和上面的-A比较像。-XX可以展示更多的信息(比如link layer的header)。
-n,不解析hostname,tcpdump会优先暂时主机的名字。-nn则不展示主机名和端口名(比如443端口会被展示成https)。
-s,截取的包字节长度,默认情况下tcpdump会展示96字节的长度,要获取完整的长度可以用-s0或者-s1600。
-c,只截取指定数目的包,然后退出。
-v,展示更多的有用信息,还可以用-vv -vvv增加信息的展示量。
src,指明ip包的发送方地址。
dst,指明ip包的接收方地址。
port,指明tcp包发送方或者接收方的端口号。
and,or,not,
tcpdump tcp[13] & 16!=0’
tcpdump src port 80 and tcp
tcpdump -vv src baidu and not dst port 23
tcpdump -nnvvS src 192.0.1.100 and dst port 443
tcpdump: WARNING: rvi0: That device doesn't support promiscuous mode
(BIOCPROMISC: Operation not supported on socket)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on rvi0, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
............en0...................... ...............................................................................$.Z............................................ZF.[............ZF.[...6..........
15:45:04.201643 IP 192.168.2.54.49525 > 218.75.177.11.https: Flags [F.], seq 1966557688, ack 1968545729, win 4096, options [nop,nop,TS val 1005623903 ecr 2012104264], length 0
............en0...................... ...............................................................................$.Z.......................................`w...ZF.[..E..4..@.@......6.K...u..u7I.uU.............
;.._w.FH
15:45:04.216860 IP 192.168.2.54.49525 > 218.75.177.11.https: Flags [FP.], seq 4294967211:0, ack 1, win 4096, options [nop,nop,TS val 1005623943 ecr 2012134515], length 85
............en0...................... ...............................................................................$.Z.O.....................................`w...ZF.[..E....m@.@.*....6.K...u..u7I.uU.............
;...w..s....P'._..c..)L..b....X....[....m.)"k.*7...'x.....P$.......1...)....?t+._ny4..UQd/..3
15:45:04.232246 IP 192.168.2.54.49525 > 218.75.177.11.https: Flags [.], ack 1, win 4096, options [nop,nop,TS val 1005623957 ecr 2012134519], length 0
............en0...................... ...............................................................................$.Z6......................................`w...ZF.[..E..4X.@.@......6.K...u..u7I.uU......v#.....
;...w..w
15:45:04.232328 IP 192.168.2.54.49525 > 218.75.177.11.https: Flags [.], ack 2, win 4096, options [nop,nop,TS val 1005623957 ecr 2012134519], length 0
............en0...................... ...............................................................................$.Z.......................................`w...ZF.[..E..4)L@.@..B...6.K...u..u7I.uU......v".....
;...w..w
15:45:18.443362 IP 192.168.2.54 > 192.168.2.100: ICMP 192.168.2.54 udp port weblogin unreachable, length 36
............en0...................... ...............................................................................$.Z....................................4.......ZF.[..E..8*...@..>...6...d.. .....E..8...........d...6.5...$..
15:45:23.372847 ARP, Reply 192.168.2.54 is-at f4:f1:5a:46:97:5b (oui Unknown), length 28
............en0...................... ...............................................................................$.Zo...................................4.......ZF.[............ZF.[...64........d
15:46:18.444230 IP 192.168.2.54 > 192.168.2.100: ICMP 192.168.2.54 udp port weblogin unreachable, length 36
............en0...................... ...............................................................................$.ZF...................................4.......ZF.[..E..8$...@..U...6...d..
o....E..8./.........d...6.c...$..
15:46:23.372414 ARP, Reply 192.168.2.54 is-at f4:f1:5a:46:97:5b (oui Unknown), length 28
............en0...................... ...............................................................................$.Z....................................4.......ZF.[............ZF.[...64........d
15:46:56.202113 ARP, Request who-has 192.168.2.1 tell 192.168.2.54, length 28
............en0...................... ...............................................................................$.Z............................................ZF.[............ZF.[...6..........
15:46:56.231715 IP 192.168.2.54.62927 > public1.114dns.com.domain: 39203+ A? minorshort.weixin.qq.com. (42)
............en0...................... ...............................................................................$.Z#......................................`w...ZF.[..E..F.A..@.,....6rrrr...5.2.;.#..........
minorshort.weixin.qq.com.....
15:46:56.593275 IP 192.168.2.54.49527 > 41.224.151.61.dial.xw.sh.dynamic.163data.com.cn.https: Flags [S], seq 2997068169, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 1005736282 ecr 0,sackOK,eol], length 0
............en0...................... ...............................................................................$.Z{. ....................................`w...ZF.[..E..@.i@.@.q....6=..).w.............................
;.QZ........
<!-- rvictl -x fa6770acd2e0625 -->
Wireshark用的是RVI(Remote Virtual Interface)
(iOS5以上才支持)。
wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。点击Caputre->Interfaces.. 出现下面对话框,选择正确的网卡。然后点击"Start"按钮, 开始抓包
是在MAC上建立虚拟网络接口来作为iOS设备的网络栈,这样所有经过iOS设备的数据都会经过该虚拟接口,iOS设备可以为任意网络类型,这样在MAC上用tcpdump或WireShark来抓取该虚拟接口就能实现对iOS设备的抓包。
rvictl
不像代理,不会干扰iOS设备正常的网络访问。
打开Wireshark,在捕获选项里面选择rvi0这个设备,这个时候,iPhone所有TCP和UDP流量,都会打印到Mac上 .在Wireshark里面输入合适的过滤器,便于追踪目标流量
-l 当前的活跃设备
-x 创建虚拟网卡
-s 结束虚拟网卡
打开Xcode,按 shift + command + 2,找到你要抓包的iOS设备的Identifier后面的一长串,复制下来
打开Terminal,输入rvictl -s xxx 。xxx为你刚才复制的东西
打开WireShark,找到设置按钮,排在首项的第四个,然后在输入项选择rvi0这个虚拟网卡,点开始,就开始抓包了。
devzkndeMacBook-Pro:~ devzkn$ rvictl -x 07cf5424d3844522c3396fc55f419a11633cb54c