文章目录
参考文章1;http://t.csdn.cn/L3WES
wireshark 抓包推荐文章
1. Tcpdump简介
Tcpdum是Linux上强大的网络数据采集分析工具。
常用于捕获WWW web数据包数据。使用数据连接层(OSI第2层)的MAC分组数据进行显示;
它可以列出十六进制(十六进制)和ASCII数据包内容,这对于监视数据包内容非常有用
1.1 第一种类型的关键字:host net port
host 210.27.48.3指明 210.27.48.3是一台主机
net202.0.0.0 指明202.0.0.0 是一个网络地址 port 23 指明端口23
1.2 第二种确定传输方向的关键字
主要包括 src,dst,dst or src,dst and src。这些关键字指明了传输的方向。
src 源;dst 目的;没有指明方向关键字,则缺省是src or dst.
1.3 第三种是协议的关键字,主要包括ip,arp,udp,tcp
1.4 语法
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
1.5 参数说明
-nn:直接以 IP 及 port number 头显示,而非主机名与服务名称
-X 告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
2.简单案例
参考连接:https://blog.51cto.com/u_15127502/4017921
2.1 三次握手及四次挥手案例分析
抓包方法:首先使用tcpdump命令截获本机与某远程主机的数据包,然后打开某远程主机对应的网站,这里用我的域名www.fonxian.cn来做试验。
得到域名对应的ip: 61.135.169.125
ping www.baidu.com
#得到本机内网ip:10.128.10.2
ifconfg
#参数的目的是获得ack的绝对值,不加该参数,第三次握手的ack为相对值1
sudo tcpdump -S host 192.168.0.108 and 151.101.100.133
得到下图
其中
1 S 表示是SYN 标记 客户端正准备发起一个请求
2 客户端发送的seq=3481431827
3 表示服务器接收到客户端的请求 发给客户端 ack=34814318278 同时发送SYN=421177755
4 表示客户端接受到服务器的同意连接的请求 发送确认信息 ack=421177756
5 P 表示数据传输状态
6 F 表示连接开始断开的状态
7 表示客户端主动发起断开连接的请求 seq=3481432002, ack=421180537
8 服务端发起确认请求 ack=3481432003
9 表示服务端发起断开连接的请求 seq=421180537, ack=3481432003
10 表示客户端收到服务端发送的断开连接的请求 发送确认信息 ack=421180538
如果你是第一次看 tcpdump 的 man page 時,肯定一個頭兩個大,因為 tcpdump 幾乎都是分析封包的表頭資料,使用者如果沒有簡易的網路封包基礎,要看懂粉難吶! 所以,至少您得要回到 網路基礎裡面去將 TCP 封包的表頭資料理解理解才好啊
2.2 FTP 文件传输获取密码
[root@linux ~]# tcpdump -i lo -nn -X 'port 21'
0x0000: 4500 0048 2a28 4000 4006 1286 7f00 0001 E..H*(@.@.......
0x0010: 7f00 0001 0015 80ab 8355 2149 835c d825 .........U!I./.%
0x0020: 8018 2000 fe3c 0000 0101 080a 0e2e 0b67 .....<.........g
0x0030: 0e2e 0b61 3232 3020 2876 7346 5450 6420 ...a220.(vsFTPd.
0x0040: 322e 302e 3129 0d0a 2.0.1)..
0x0000: 4510 0041 d34b 4000 4006 6959 7f00 0001 E..A.K@.@.iY....
0x0010: 7f00 0001 80ab 0015 835c d825 8355 215d ........./.%.U!]
0x0020: 8018 2000 fe35 0000 0101 080a 0e2e 1b37 .....5.........7
0x0030: 0e2e 0b67 5553 4552 2064 6d74 7361 690d ...gUSER.dmtsai.
0x0040: 0a .
0x0000: 4510 004a d34f 4000 4006 694c 7f00 0001 E..J.O@.@.iL....
0x0010: 7f00 0001 80ab 0015 835c d832 8355 217f ........./.2.U!.
0x0020: 8018 2000 fe3e 0000 0101 080a 0e2e 3227 .....>........2'
0x0030: 0e2e 1b38 5041 5353 206d 7970 6173 7377 ...8PASS.mypassw
0x0040: 6f72 6469 7379 6f75 0d0a ordisyou..
上面的輸出結果已經被簡化過了,你必須要自行在你的輸出結果當中搜尋相關的字串才行。 從上面輸出結果的特殊字體中,我們可以發現『 該 FTP 軟體使用的是 vsftpd ,並且使用者輸入 dmtsai 這個帳號名稱,且密碼是 mypasswordisyou』 嘿嘿!你說可不可怕啊!如果使用的是明碼的方式來傳輸你的網路資料? 所以我們才常常在講啊,網路是很不安全低!
2.3 实际案例-DNS 报文
背景:大数据所在机器的容器里面已配置DNS 解析,但是在访问页面后报错依然是解析不到;后面又配置了dnsmasq 服务,依然报错解析不到;
2.3.1 配置信息
2.3.2 报错信息
2.3.3 tcpdump抓包分析
docker cp tcpdump.rpm openrestry:/opt
docker exec -it openrestry /bin/bash
cd /opt && rpm --ivh --force tcpdump.rpm --nodeps
开始抓包
tcpdump -i eth0 --any -w dns.cap
利用wireshark 分析
过滤出条件,只要dns 相关的53端口信息
大数据容器内能curl 通域名,但是openrestry lua 在调用时依然解析不到
一次 抓包显示,流量走的是ipv6
调整openrestry lua 的nginx 配置
在 location /sdkapi/track下第一行添加:
resolver 本地ip地址 ipv6=off;
二次抓包显示,流量走的是ipv4
成功解决
2.3.4 结论
此次抓包,分析报文中的DNS报文(DNS协议)本地配置的解析是ipv4 ,但是lua 解析的确实ipv6,此时就看到了问题所在。
对于其他问题,还需要找到问题点对应报文。对应协议的报文。比如:HTTP报文、TCP报文、ARP报文、此处的DNS 报文
2.4 ARP 报文
推荐链接:http://t.csdn.cn/D6C5R