概述
- 常用命令详解
- 基本命令
$ tcpdump //默认抓取第一个网卡接口的所有数据包
$ tcpdump –i ens33 //抓取网卡ens33的数据包
$ tcpdump host 47.95.224.4 //监听主机47.95.224.4接收发送的所有数据包
$tcpdump host 47.95.224.4 and 10.13.32.60
//截获主机47.95.224.4与10.13.32.60之间的所有数据包
$ tcpdump host 47.95.224.4 and (10.13.32.60 or 10.13.32.169)
//截获主机47.95.224.4与10.13.32.60或10.13.32.169之间的所有数据包
$tcpdump host 47.95.224.4 and !10.13.32.169
//截获主机47.95.224.4 和 非10.13.32.169主机的所有数据包
$ tcpdump -i ens33 src host 47.95.224.4 //截获主机47.95.224.4发出的所有数据包
$ tcpdump -i ens33 dst host 47.95.224.4//截获主机47.95.224.4接收的所有数据包
$ tcpdump tcp port 443 and host www.baidu.com
//截获本机443端口(https)与www.baidu.com之间的数据包
- 监听指定网络地址的数据包
$ tcpdump net 47.95.224.0/24//监听网络地址47.95.224.0/24收发的所有数据包
$ tcpdump ip and not net 10.13.32.169 //监听本地网络所有的ip数据包
- 监听icmp数据包
$ tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
//打印除'echo request'或者'echo reply'类型以外的ICMP数据包(比如,需要打印所有非ping程序产生的数据包时可用到此表达式。'echo reuqest' 与 'echo reply' 这两种类型的ICMP数据包通常由ping程序产生))
//注意, 单引号或反斜杆不能省略, 这可以防止shell对&的解释或替换.
*ICMP协议:是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。ICMP的全称是 Internet Control Message Protocol 。从技术角度来ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况。
ICMP 是个非常有用的协议﹐尤其是当我们要对网路连接状况进行判断的时候。
ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。例如,在1999年8月海信集团“悬赏”50万元人民币测试防火墙的过程中,其防火墙遭受到的ICMP攻击达334050次之多,占整个攻击总数的90%以上!可见,ICMP的重要性绝不可以忽视!
比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death” 攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。(操作系统已经取消了发送ICMP数据包的大小的限制,解决了这个漏洞)
此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。*
- http抓包
$tcpdump –XvvennSs 0 –i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4850
GET: 45(E)、47(G)
HTTP:H:48 T:54
ASC码65~90为26个大写英文字母
- 监听指定ip/tcp字段内容的数据包
$ tcpdump ‘ip[2:2]>3’
//截获本机ip数据包长度大于3字节的数据包
//ip[2]表示ip数据包的第三个字节的内容,ip[2:2]代表第三个字节与第四个字节的所有内容
//也就是ip数据包中的总长度字段的值
$ tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
//截获端口为80,ip数据包数据负载不为0数据包
//判断ip数据包数据负载是否为0: ip数据包长度-ip包头长度-tcp首部长度=ip数据负载长度
//ip[0]代表版本字段和首部长度字段的内容
//ip[0]&0xf 表示首部长度字段
//ip[0]&0xf<<2 首部长度以32bit(4字节)为单位,所以需要左移2位,即扩大四倍
//tcp[12]&0xf0>>2原理同ip[0],表示tcp的首部长度
$ tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin)!=0 and host 47.95.224.4'
//截获主机47.95.224.4建立或断开TCP连接的数据包
- tcpdump基本格式小结
$ tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包,抓完后自动停止
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
- 选项小结
-c count tcpdump将在接受到count个数据包后退出.
-e 每行的打印输出中将包括数据包的数据链路层头部信息
-w file 数据包输出到file,用于wireshark分析包
-s len设置tcpdump的数据包抓取长度为len, 如果不设置默认是262144byte
-w 把包数据直接写入文件而不进行分析和打印输出. 这些包数据可在随后通过-r 选项来重新读入并进行分析和打印.
-x 当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据(但不包括连接层的头部).总共打印的数据大小不会超过整个数据包的大小与snaplen 中的最小值. 必须要注意的是, 如果高层协议数据没有snaplen 这么长,并且数据链路层(比如, Ethernet层)有填充数据, 则这些填充数据也会被打印.(nt: so for link layers that pad, 未能衔接理解和翻译, 需补充 )
-xx tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据, 其中包括数据链路层的头部.
-X 当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据(但不包括连接层的头部).这对于分析一些新协议的数据包很方便.
-XX 当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据, 其中包括数据链路层的头部.这对于分析一些新协议的数据包很方便.
- 操作符小结
有效的操作符有:
否定操作 (`!' 或 `not')
与操作(`&&' 或 `and')
或操作(`||' 或 `or')
- 端口号
周至端口:0~1023
动态端口:1024~65535
按照协议类型分为tcp/udp/ip/icmp端口
- tcp端口:面向连接的可靠传输 常见的有ftp服务的21端口,telnet服务的23端口,smtp服务的25端口以及http服务的80端口,https服务的443端口。
- udp端口:无需建立连接,不可靠。常见的有dns服务的53端口,snmp服务的161端口,ntp服务的123端口。还有经常使用的8000端口和4000端口。1024端口分配给第一个向系统发出申请的端口。
HTTP服务器,默认的端口号为80/tcp(木马Executor开放此端口);
HTTPS(securely transferring web pages)服务器,默认的端口号为443/tcp 443/udp;
Telnet(不安全的文本传送),默认端口号为23/tcp(木马Tiny Telnet Server所开放的端口);
FTP,默认的端口号为21/tcp(木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口);
TFTP(Trivial File Transfer Protocol ),默认的端口号为69/udp;
SSH(安全登录)、SCP(文件传输)、端口重定向,默认的端口号为22/tcp;
SMTP Simple Mail Transfer Protocol (E-mail),默认的端口号为25/tcp(木马Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口);
POP3 Post Office Protocol (E-mail) ,默认的端口号为110/tcp;
WebLogic,默认的端口号为7001;
WebSphere应用程序,默认的端口号为9080;
WebSphere管理工具,默认的端口号为9090;
JBOSS,默认的端口号为8080;
TOMCAT,默认的端口号为8080;
WIN2003远程登陆,默认的端口号为3389;
Symantec AV/Filter for MSE ,默认端口号为 8081;
Oracle 数据库,默认的端口号为1521;
ORACLE EMCTL,默认的端口号为1158;
Oracle XDB( XML 数据库),默认的端口号为8080;
Oracle XDB FTP服务,默认的端口号为2100;
MS SQL*SERVER数据库server,默认的端口号为1433/tcp 1433/udp;
MS SQL*SERVER数据库monitor,默认的端口号为1434/tcp 1434/udp;
QQ,默认的端口号为1080/ud
- TCP数据包格式
- 序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
- 确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
- 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文交给应用层。
RST:重置连接。
SYN:发起一个新连接。
FIN:释放一个连接。
标志位:tcp[13]标志位 S置1
|C|E|U|A|P|R|S|F|
|---------------|
|0 0 0 1 0 0 1 0|
- tcp连接建立
c->s: SYN =1,随机产生一个seq=j,length=0
s->c: SYN=1,ACK=1,seq=I,ack=j+1,length=0
c->s: ACK=1,ack=1,length=0
- tcp 数据传输
例子:c->s发送cyn,s->c回送Copy cyn
c->s: PSH=1,ACK=1,seq=1:4,ack=1,length=3
s->c: PSH=1,ACK=1,seq=27:38,ack=4, length=11
c->s: ACK=1,ack=38,length=0
- tcp断开连接
例子:c->s发送exit,s收到该消息后断开tcp连接
c->s: PSH=1,ACK=1,seq=4:8,ack=38,length=4
c->s: FIN=1,ACK=1,seq=8,ack=38,length=0
s->c: ACK=1,ack=9,length=0
c->s:RST=1,ACK=1,seq=9,ack=38,length=0
最后
以上就是单纯大叔为你收集整理的tcpdump 在ubuntu上使用命令学习笔记 /tcp、ip、icmp数据包格式的全部内容,希望文章能够帮你解决tcpdump 在ubuntu上使用命令学习笔记 /tcp、ip、icmp数据包格式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复