shuming的专栏

1. tcpdump的基本原理1.1 tcpdump starce 的区别

在本机中的进程的系统行为调用跟踪,starce 是一个很好的工具;但是在网络问题的调试中,tcpdump 应该是一个必不可少的工具;能清晰分析网络通信的信息。

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

1.2 linux下tcpdump 抓包的基本原理

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

当抓包模块把自己伪装成一个网络协议的时候,系统在收到报文的时候就会这个伪协议一次机会,让它来对网卡收到的报文进行一次处理,此时该抓包模块就会趁机把报文完整的copy一份,然后把这个copy的数据给抓包模块(tcpdump)

tcpdump 具体的工作原理:协议的注册、网络层对接收报文的处理 :

2. tcpdump 命令详解2.1 tcpdump 命令的基本简介

tcpdump :dump the traffic on a network 根据使用者的定义对网络上的数据包进行截获的分析工作;tcpdump 可以讲网络中传送的数据包的header完全截获下来进行分析;它支持对网络层(net IP 段)、协议(TCP/UDP)、主机(src/dst host)、网络或端口(prot)的过滤,并提供and、or、not 等逻辑语句来帮助你去掉无用的信息。tcpdump:默认情况下,sudo /usr/sbin/tcpdump 会监视 第一个网络接口 一般是eth0 的所有port 所有协议的 数据包

2.2 tcpdump 的主要选项

协议TCP,UDP,IP,ARP,RARP,ETHER,FDDI

网络(net)192.168.0.0/16 IP网段

方向(host)src,dst,src or dst,src and dst

端口(prot)80 22 !22 9999

逻辑and,or,not &&,||,!

前面的四个选项:协议、net 、host、port 如果同时在 tcpdump 里面 时必须用 逻辑 and 连接起来;而且如用() 一定要转义,否则会包语法错误。

sudo /usr/sbin/tcpdump tcp and \(src host test1.hostname or test2.hostname \) and port 3333 and net 172.21.121.0/24 -c 10 -vvv

3. tcpdump 的选项3.1 主要选项

-s :按包长截取数据;默认是60个字节;如果包大于60个字节,则抓包会出现丢数据;所以我们一般会设置 -s 0 ;这样会按照包的大小截取数据;抓到的是完整的包数据-r:从文件中读取【与 -w 对应,/usr/sbin/tcpdump -r test.out 读取 tcpdump -w test.out】-w:到处指向文件【一定要用,-w t.out ,然后用 -r t.out 来看抓包信息,否则可读性很差】

3.2 tcpdump 抓包的具体含义

tcpmdump 抓包出来分析包的具体含义

包携带的标志:

抓取包的具体含义:

server.hostname: sudo /usr/sbin/tcpdump tcp port 80 and host clinet.hostname -c 30 -vvv -w t.outsudo /usr/sbin/tcpdump -r t.out13:59:29.012370 IP client.hostname.tbsite.net.50741 > server.hostname.http: S 562843056:562843056(0) win 14480 <mss 1460,sackOK,timestamp 230871413 4035264472,nop,wscale 7>13:59:29.012374 IP server.hostname.http > client.hostname.tbsite.net.50741: S 2306923370:2306923370(0) ack 562843057 win 5792 <mss 1460,sackOK,timestamp 4035271299 230871413,nop,wscale 9>13:59:29.012547 IP client.hostname.tbsite.net.50741 > server.hostname.http: . ack 1 win 114 <nop,nop,timestamp 230871413 4035271299>13:59:29.012582 IP client.hostname.tbsite.net.50741 > server.hostname.http: P 1:1006(1005) ack 1 win 114 <nop,nop,timestamp 230871413 4035271299>13:59:29.012593 IP server.hostname.http > client.hostname.tbsite.net.50741: . ack 1006 win 16 <nop,nop,timestamp 4035271299 230871413>13:59:29.025011 IP client.hostname.tbsite.net.50777 > server.hostname.http: S 2359624339:2359624339(0) win 14480 <mss 1460,sackOK,timestamp 230871425 4035264472,nop,wscale 7>13:59:29.025022 IP server.hostname.http > client.hostname.tbsite.net.50777: S 2305562654:2305562654(0) ack 2359624340 win 5792 <mss 1460,sackOK,timestamp 4035271312 230871425,nop,wscale 9>13:59:29.025197 IP client.hostname.tbsite.net.50777 > server.hostname.http: . ack 1 win 114 <nop,nop,timestamp 230871425 4035271312>13:59:29.025228 IP client.hostname.tbsite.net.50777 > server.hostname.http: P 1:837(836) ack 1 win 114 <nop,nop,timestamp 230871425 4035271312>13:59:29.025240 IP server.hostname.http > client.hostname.tbsite.net.50777: . ack 837 win 15 <nop,nop,timestamp 4035271312 230871425>

4. tcpdump的实例:

起步1:抓取指定端口的包tcpdump-ieth0-c100起步2:抓取指定协议的包tcpdump-ieth0-c100tcp起步3:抓取指定协议,指定port的包【tcpipportsrcdsthostnet】tcpdump-ieth0-c100tcpport5440起步4:组合过滤条件【andornot】tcpdump-ieth0-c100tcpport5440andsrchost192.1.1.2起步5:抓取指定网段的包tcpdump-ieth0-c100tcpport5440andsrcnet192.1.1.0/24高级1:写入文件并用wireshark在windows下分析tcpdumptcp-ieth1-t-s0-c100anddstport!22andsrcnet192.168.1.0/24-w./target.cap然后用ftp传输到windows下面,在用wireshark打开cap文件即可高级2:提取http包tcpdump-XvvennSs0-ieth0tcp[20:2]=0x4745ortcp[20:2]=0x4854-c20-w./target.cap其中-s0表示不限制包的大小;tcp[20:2]从表示tcp包头第20个字节开始的2个字节等于0x4745(对应字符GE)或者等于0x4854(对应HT);这种方法适用于tcp头中OPTION为空的情况,如果不为空,,需要从第24个字节开始。爱情要完结的时候自会完结,到时候,你不想画上句号也不行。

shuming的专栏

相关文章:

你感兴趣的文章:

标签云: