tcomitmdump s-s 0 -w 后面是什么

叶子的离开,是风的追求,还是树的不挽留?
tcpdump参数解析及使用详解
tcpdump介绍
是一个运行在命令行下的抓包工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。tcpdump 适用于
大多数的类Unix系统操作系统(如linux,BSD等)。类Unix系统的 tcpdump 需要使用libpcap这个捕捉数据的库就像 windows下的WinPcap。
在学习tcpdump前最好对基本网络的网络知识有一定的认识。
tcpdump命令格式及常用参数
Tcpdump的大概形式如下:
例:tcpdump –i eth0 ’port 1111‘ -X -c 3
-X告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
tcpdump采用命令行方式,它的命令格式为:
  tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
          [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 类型 ] [ -w 文件名 ] [表达式 ]
tcpdump的选项介绍
   -a    将网络地址和广播地址转变成名字;
   -d    将匹配信息包的代码以人们能够理解的汇编格式给出;
   -dd    将匹配信息包的代码以c语言程序段的格式给出;
   -ddd    将匹配信息包的代码以十进制的形式给出;
   -e    在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议;
   -f    将外部的Internet地址以数字的形式打印出来;
   -l    使标准输出变为缓冲行形式;
   -n    指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字;
指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
   -t    在输出的每一行不打印时间戳;
   -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
   -vv    输出详细的报文信息;
   -c    在收到指定的包的数目后,tcpdump就会停止;
   -F    从指定的文件中读取表达式,忽略其它的表达式;
   -i    指定监听的网络接口;
将网卡设置为非混杂模式,不能与host或broadcast一起使用
   -r    从指定的文件中读取包(这些包一般通过-w选项产生);
   -w    直接将包写入文件中,并不分析和打印出来;
-s snaplen
snaplen表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话
tcpdump 只显示部分数据包,默认68字节。
   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
------------------------------------------------
1、抓取回环网口的包:tcpdump -i lo2、防止包截断:tcpdump -s03、以数字显示主机及端口:tcpdump -n
如键入命令: tcpdump –i eth0 ‘port 1111’ -X -c 3
-i 是interface的含义,是指我们有义务告诉tcpdump希望他去监听哪一个网卡,
-X告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
port 1111我们只关心源端口或目的端口是1111的数据包.
-c 是Count的含义,这设置了我们希望tcpdump帮我们抓几个包。
其中还有另外一个比较重要的参数– l
使得输出变为行缓冲
-l选项的作用就是将tcpdump的输出变为“行缓冲”方式,这样可以确保tcpdump遇到的内容一旦是换行符即将缓冲的内容输出到标准输出,以便于利用管道
或重定向方式来进行后续处理。
Linux/UNIX的标准I/O提供了全缓冲、行缓冲和无缓冲三种缓冲方式。
标准错误是不带缓冲的,终端设备常为行缓冲,而其他情况默认都是全缓冲的。
例如我们只想提取包的每一行的第一个域(时间域),这种情况下我们就需要-l将默认的全缓冲变为行缓冲了。
tcpdump -i eth0 port 1111 -l | awk '{print $1}'
-w 直接将包写入文件中(即原始包,如果使用 重定向 & 则只是保存显示的结果,而不是原始文件),即所谓的“流量保存”---就是把抓到的网络包能存储到磁盘上,
保存下来,为后续使用。参数-r 达到“流量回放”---就是把历史上的某一时间段的流量,重新模拟回放出来,用于流量分析。
通过-w选项将流量都存储在cp.pcap(二进制格式)文件中了.可以通过 –r 读取raw packets文件 cp.pcap.
如:sudo tcpdump i- eth0 'port 1111' -c 3 -r cp.pcap 即可进行流量回放。
问:流量回放又有啥子用?
tcpdump的输出结果介绍
键入命令:sudo tcpdump -i eth0 -e -nn -X -c 2 'port1111' 所截获包内容如下:
   -n    不把网络地址转换成名字;
sudo tcpdump -i eth0 -e -nn -X -c 2 'port1111'
第一行:“tcpdump: verbose output suppressed, use -v or -vv for fullprotocol decode”
提示使用选项-v和-vv,可以看到更全的输出内容。
第二行“listening on eth0, link-type EN10MB (Ethernet), capture size 65535bytes”
我们监听的是通过eth0这个NIC设备的网络包,且它的链路层是基于以太网的,要抓的包大小限制是65535字节。包大小限制值可以通过-s选项来设置。
第三行”12:40:33.:19:e0:b5:10:94 & 00:1a:a0:31:39:d4, ethertypeIPv4 (0x0800),”
12:40:33.569037 分别对应着这个包被抓到的“时”、“分”、“秒”、“微妙”。
00:19:e0:b5:10:94 & 00:1a:a0:31:39:d4 表示MAC地址00:19:e0:b5:10:94发送到MAC地址为00:1a:a0:31:39:d4的主机,ethertype IPv4 (0x0800)表示
Ethernet帧的协议类型为ipv4(即代码为0x0800)。
第四行”length 66: 210.45.123.249.27236 & 172.16.0.11.1111: Flags [S],seq ,
length 66表示以太帧长度为66。 210.45.123.249.27236表示这个包的源IP为210.45.123.249,源端口为27236,’&’表示数据包的传输方向, 172.16.0.11.1111,
表示这个数据包的目的端ip为172.16.0.11,目标端口为端口是我的一个web服务器监听端口。Flags是[S],表明是syn建立连接包(即三次握手的第一次
握手),seq 序号为,这个其实就是TCP三次握手的第一次握手:client(210.45.123.249)发送syn请求建立连接包。
第五行” win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0”
win 8192 表示窗口大小为8192字节。options[mss 1460,nop,wscale 2,nop,nop,sackOK]为tcp首部可选字段mss 1460表示mss是发送端(客户端)通告的最大
报文段长度,发送端将不接收超过这个长度的TCP报文段(这个值和MTU有一定关系)。nop是一个空操作选项, wscale指出发送端使用的窗口扩大因子为2, sackOK
表示发送端支持并同意使用SACK选。
下面几行分别是IP,TCP首部 ,这里不再敷述。
tcpdump过滤语句介绍
可以给tcpdump传送“过滤表达式”来起到网络包过滤的作用,而且可以支持传入单个或多个过滤表达式。
可以通过命令 man pcap-filter 来参考过滤表达式的帮助文档
过滤表达式大体可以分成三种过滤条件,“类型”、“方向”和“协议”,这三种条件的搭配组合就构成了我们的过滤表达式。
关于类型的关键字,主要包括host,net,port, 例如 host 210.45.114.211,指定主机 210.45.114.211,net 210.11.0.0 指明210.11.0.0是一个网络地址,port 21 指明
端口号是21。如果没有指定类型,缺省的类型是host.
关于传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,
这些关键字指明了传输的方向。举例说明,src 210.45.114.211 ,指明ip包中源地址是210.45.114.211, dst net 210.11.0.0 指明目的网络地址是210.11.0.0
。如果没有指明
方向关键字,则缺省是srcor dst关键字。
关于协议的关键字,主要包括 ether,ip,ip6,arp,rarp,tcp,udp等类型。这几个的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的
如我们只想抓tcp的包命令为: sudo tcpdump -i eth0
-nn -c1 'tcp'
除了这三种类型的关键字之外,其他重要的关键字如下:
gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算是'or' ,'||';
可以利用这些关键字进行组合,从而组合为比较强大的过滤条件。下面举例说明
(1)只想查目标机器端口是21或80的网络包,其他端口的我不关注:
  sudo tcpdump -i eth0 -c 10 'dst port 21 or dst port 80'
(2) 想要截获主机172.16.0.11 和主机210.45.123.249或 210.45.123.248的通信,使用命令(注意括号的使用):
  sudo tcpdump -i eth0 -c 3 'host 172.16.0.11 and (210.45.123.249 or210.45.123.248)'
(3)想获取使用ftp端口和ftp数据端口的网络包
sudo tcpdump 'port ftp or ftp-data'
这里 ftp、ftp-data到底对应哪个端口? linux系统下 /etc/services这个文件里面,就存储着所有知名服务和传输层端口的对应关系。如果你直接把/etc/services里
的ftp对应的端口值从21改为了3333,那么tcpdump就会去抓端口含有3333的网络包了。
(4) 如果想要获取主机172.16.0.11除了和主机210.45.123.249之外所有主机通信的ip包,使用命令:
sudo tcpdump ip ‘host 172.16.0.11 and ! 210.45.123.249’
(5) 抓172.16.0.11的80端口和110和25以外的其他端口的包
sudo tcpdump -i eth0 ‘host 172.16.0.11 and! port 80 and ! port 25 and ! port 110’
下面介绍一些tcpdump中过滤语句比较高级的用法
想获取172.16.10.11和google.com之间建立TCP三次握手中带有SYN标记位的网络包.
命令为:sudo tcpdump -i eth0 'host 172.16.0.11 andhost google.com and tcp[tcpflags]&tcp-syn!=0' -c 3 -nn
上面的命令是不是看着有点晕的感觉。
下面详细介相关知识。
其实我们理解这种语法:
proto [ expr : size] ,就不难理解上面的语句了。
下面详细介绍proto [ expr : size]
Proto即protocol的缩写,它表示这里要指定的是某种协议名称,如ip,tcp,udp等。总之可以指定的协议有十多种,如链路层协议 ether,fddi,tr,wlan,ppp,slip,link,
网络层协议ip,ip6,arp,rarp,icmp传输层协议tcp,udp等。
expr用来指定数据报字节单位的偏移量,该偏移量相对于指定的协议层,默认的起始位置是0;而size表示从偏移量的位置开始提取多少个字节,可以设置为
1、2、4,默认为1字节。如果只设置了expr,而没有设置size,则默认提取1个字节。比如ip[2:2],就表示提取出第3、4个字节;而ip[0]则表示提取ip协议头的
第一个字节。在我们提取了特定内容之后,我们就需要设置我们的过滤条件了,我们可用的“比较操作符”包括:&,&,&=,&=,=,!=,总共有6个。
举例:想截取每个TCP会话的起始和结束报文(SYN 和 FIN 报文), 而且会话方中有一个远程主机.
sudo tcpdump 'tcp[13] & 3 != 0 and not(src and dst net 172.16.0.0)' -nn
如果熟悉tcp首部报文格式可以比较容易理解这句话,因为tcp便宜13字节的位置为2位保留位和6位标志位(URG,ACK,PSH,RST,SYN,FIN), 所以与3相与就可以得出
SYN,FIN其中是否一个置位1.
从上面可以看到在写过滤表达式时,需要我们对协议格式比较理解才能把表达式写对。这个比较有难度的..。为了让tcpdump工具更人性化一些,有一些常用的偏移量,
可以通过一些名称来代替,比如icmptype表示ICMP协议的类型域、icmpcode表示ICMP的code域,tcpflags 则表示TCP协议的标志字段域。
更进一步的,对于ICMP的类型域,可以用这些名称具体指代:icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect,icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob,icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq,icmp-maskreply。
而对于TCP协议的标志字段域,则可以细分为tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg。
对于tcpdump 只能通过经常操作来熟练这些语句了。也可以把网络包用tcpdump截获保存到指定文件,然后用wireshark等可视化软件分析网络包。
http://network.51cto.com/art/73.htm
http://fanqiang.chinaunix.net/app/other//4833.shtml
http://hi.baidu.com/sxq5858/item/af17d7bfb0953
http://www.cnblogs.com/ggjucheng/archive//2322659.html
没有更多推荐了,新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
稍有积蓄, 积分 219, 距离下一级还需 281 积分
论坛徽章:0
网络丢包,厂家让我tcpdump -i eth1 -c 1000 -s0 -w eth.cap抓包分析,可是输入上面命令后提示参数错误tcpdump: invalid snaplen 0,是-s 0 参数的错误,去掉-s 0后就没有错误了,但是我怕抓到的数据包(他们说加-s 0是抓全包),有谁知道 tcpdump -s 参数的使用,最好详细点,像tcpdump -s 68;tcpdump 90;tcpdump -s 6000; -s后最大支持多少等等,我先谢了
稍有积蓄, 积分 219, 距离下一级还需 281 积分
论坛徽章:0
从每个报文中截取snaplen字节的数据,而不是缺省的68(如果是SunOS的NIT,最小值是96).68个字节适用于IP,ICMP,TCP和UDP,但是有可能截掉名字服务器和NFS报文的协议信息(见下面).输出时如果指定``[|proto]'',tcpdump可以指出那些捕捉量过小的数据报,这里的proto是截断发生处的协议层名称.注意,采用更大的捕捉范围既增加了处理报文的时间,又相应的减少了报文的缓冲数量,可能导致报文的丢失.你应该把snaplen设的尽量小,只要能够容纳你需要的协议信息就可以了.
tcpdump详细用法见
稍有积蓄, 积分 219, 距离下一级还需 281 积分
论坛徽章:0
tcpdump -s0 获取全部数据包
默认的话 tcpdump 只显示部分数据包
参数 -s snaplen 就是控制这个的
默认是&&68 字节
设成0的话 就是显示全部数据包
tcpdump -p -nnn -vvv -X -s0 udp port 12345 and host 192.168.1.2 -i eth0
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处1、抓取回环网口的包:tcpdump -i lo
2、防止包截断:tcpdump -s0
3、以数字显示主机及端口:tcpdump -n
&第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。
第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和 分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
& 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&;或运算 是'or' ,'||';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
& 普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。# tcpdump&tcpdump: listening on fxp011:58:47..102.245.40.netbios-ns & 202.102.245.127.netbios-ns: udp 5011:58:47.:10:7b:8:3a:56 & 1:80:c2:0:0:0 802.1d ui/C len=43&&&&&&&&&&&&&&&&&&&&&& 80
cf08 &&&&&&&&&&&&&&&&&&&&&& 0e80 95 14 0002&&&&&&&&&&&&&&&&&&&&&& 000f 95 0008 0011:58:48.:0:e8:5b:6d:85 & Broadcast sap e0 ui/C len=97&&&&&&&&&&&&&&&&&&&&&& ffff
ffff ffff ffff ffff ffff&&&&&&&&&&&&&&&&&&&&&& 0452 ffff ffff d85 &&&&&&&&&&&&&&&&&&&&&&
f57 00&&&&&&&&&&&&&&&&&&&&&& 0000 00
使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,使用-c参数指定要监听的数据包数量,使用-w参数指定将监听到的数据包写入文件中保存A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:#tcpdump host 210.27.48.1
B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用 括号时,一定要#tcpdump host 210.27.48.1 and / (210.27.48.2 or 210.27.48.3 /)
C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:#tcpdump tcp port 23 host 210.27.48.1
E 对本机的udp 123 端口进行监视 123 为ntp的服务端口# tcpdump udp port 123
F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据:&#tcpdump -i eth0 src host hostname
G 下面的命令可以监视所有送到主机hostname的数据包:&#tcpdump -i eth0 dst host hostname
H& 我们还可以监视通过指定网关的数据包:&#tcpdump -i eth0 gateway Gatewayname
I 如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令:&#tcpdump -i eth0 host hostname and port 80
J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
K 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用 括号时,一定要#tcpdump host 210.27.48.1 and / (210.27.48.2 or 210.27.48.3 /)
L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2
M 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令: #tcpdump tcp port 23 host 210.27.48.1
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||';第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,如果我们只需要列出送到80端口的数据包,用dst port;如果我们只希望看到返回80端口的数据包,用src port。&#tcpdump &i eth0 host hostname and dst port 80& 目的端口是80或者#tcpdump &i eth0 host hostname and src port 80& 源端口是80& 一般是提供http的服务的主机如果条件很多的话& 要在条件之前加and 或 or 或 not#tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80如果在ethernet 使用混杂模式 系统的日志将会记录May& 7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.May& 7 20:03:46 localhost kernel: device eth0 entered promiscuous modeMay& 7 20:03:57 localhost kernel: device eth0 left promiscuous modetcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。
# tcpdump&& -i eth1 src& host 211.167.237.19900:02:03.096713 IP 211.167.237.199.ssh & 221.216.165.189.1467: P ) ack 33377 win 857600:02:03.096951 IP 211.167.237.199.ssh & 221.216.165.189.1467: P ) ack 33377 win 857600:02:03.100928 IP 211.167.237.199.ssh & 221.216.165.189.1467: P ) ack 33377 win 857600:02:03.101165 IP 211.167.237.199.ssh & 221.216.165.189.1467: P ) ack 33377 win 857600:02:03.102554 IP 211.167.237.199.ssh & 221.216.165.189.1467: P ) ack 33425 win 8576
表明在00:02:03点的时候,211.167.237.199通过ssh源端口连接到221.216.165.189的1467端口
#tcpdump -i eth1 src host 211.167.237.199 and dst port 146700:09:27.603075 IP 211.167.237.199.ssh & 221.216.165.189.1467: P 544(144) ack 2833 win 857600:09:27.605631 IP 211.167.237.199.ssh & 221.216.165.189.1467: P 688(144) ack 2881 win 8576
截获所有由eth0进入、源地址(src)为192.168.0.5的主机(host),并且(and)目标(dst)端口(port)为80的数据包
观看网卡传送、接收数据包的状态$ netstat& -iKernel Interface tableIface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flgeth0 639&& 0&&&&& 0&&&&& 0&&& 5705&&& 119&&& 0&&&& 0&& BMRU
Iface:& 网卡RX-OK RX-ERR RX-DRP RX-OVR : 网卡正确接收数据包的数量以及发生错误、流失、碰撞的总数TX-OK TX-ERR TX-DRP TX-OVR : 网卡正确发送数据包的数量以及发生错误、流失、碰撞的总数
[root@linux ~]# tcpdump [-nn] [-i 介面] [-w 儲存檔名] [-c 次數] [-Ae]
[-qX] [-r 檔案] [所欲擷取的資料內容]
-nn:直接以 IP 及 port number 顯示,而非主機名與服務名稱
-i :後面接要『監聽』的網路介面,例如 eth0, lo, ppp0 等等的介面;
-w :如果你要將監聽所得的封包資料儲存下來,用這個參數就對了!後面接檔名
-c :監聽的封包數,如果沒有這個參數, tcpdump 會持續不斷的監聽,
直到使用者輸入 [ctrl]-c 為止。
-A :封包的內容以 ASCII 顯示,通常用來捉取 WWW 的網頁封包資料。
-e :使用資料連接層 (OSI 第二層) 的 MAC 封包資料來顯示;
-q :僅列出較為簡短的封包資訊,每一行的內容比較精簡
-X :可以列出十六進位 (hex) 以及 ASCII 的封包內容,對於監聽封包內容很有用
-r :從後面接的檔案將封包資料讀出來。那個『檔案』是已經存在的檔案,
並且這個『檔案』是由 -w 所製作出來的。
所欲擷取的資料內容:我們可以專門針對某些通訊協定或者是 IP 來源進行封包擷取,
那就可以簡化輸出的結果,並取得最有用的資訊。常見的表示方法有:
'host foo', 'host 127.0.0.1' :針對單部主機來進行封包擷取
'net 192.168' :針對某個網域來進行封包的擷取;
'src host 127.0.0.1' 'dst net 192.168':同時加上來源(src)或目標(dst)限制
'tcp port 21':還可以針對通訊協定偵測,如 tcp, udp, arp, ether 等
還可以利用 and 與 or 來進行封包資料的整合顯示呢!
範例一:以 IP 與 port number 捉下 eth0 這個網路卡上的封包,持續 3 秒
[root@linux ~]# tcpdump -i eth0 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:33:40.41 IP 192.168.1.100.22 & 192.168.1.11.1190: P 116:232(116) ack 1 win 9648
01:33:40.41 IP 192.168.1.100.22 & 192.168.1.11.1190: P 232:364(132) ack 1 win 9648
&==按下 [ctrl]-c 之後結束
6680 packets captured
&==捉下來的封包數量
14250 packets received by filter
&==由過濾所得的總封包數量
7512 packets dropped by kernel
&==被核心所丟棄的封包
如果你是第一次看 tcpdump 的 man page 時,肯定一個頭兩個大,因為 tcpdump 幾乎都是分析封包的表頭資料,使用者如果沒有簡易的網路封包基礎,要看懂粉難吶! 所以,至少您得要回到裡面去將 TCP 封包的表頭資料理解理解才好啊! ^_^!至於那個範例一所產生的輸出範例中,我們可以約略區分為數個欄位, 我們以範例一當中那個特殊字體行來說明一下:
01:33:40.41:這個是此封包被擷取的時間,『時:分:秒』的單位;
IP:透過的通訊協定是 IP ;
192.168.1.100.22 &&:傳送端是 192.168.1.100 這個 IP,而傳送的 port number 為 22,您必須要瞭解的是,那個大於 (&) 的符號指的是封包的傳輸方向喔!
192.168.1.11.1190:接收端的 IP 是 192.168.1.11, 且該主機開啟 port 1190 來接收;
P 116:232(116):這個封包帶有 PUSH 的資料傳輸標誌, 且傳輸的資料為整體資料的 116~232 byte,所以這個封包帶有 116 bytes 的資料量;
ack 1 win 9648:ACK與 Window size 的相關資料。
最簡單的說法,就是該封包是由 192.168.1.100 傳到 192.168.1.11,透過的 port 是由 22 到 1190 , 且帶有 116 bytes 的資料量,使用的是 PUSH 的旗標,而不是 SYN 之類的主動連線標誌。 呵呵!不容易看的懂吧!所以說,上頭才講請務必到&的部分去瞧一瞧的啊!再來,一個網路狀態很忙的主機上面,你想要取得某部主機對你連線的封包資料而已時, 使用 tcpdump 配合管線命令與正規表示法也可以,不過,畢竟不好捉取! 我們可以透過 tcpdump 的表示法功能,就能夠輕易的將所需要的資料獨立的取出來。 在上面的範例一當中,我們僅針對 eth0 做監聽,所以整個 eth0 介面上面的資料都會被顯示到螢幕上, 不好分析啊!那麼我們可以簡化嗎?例如只取出 port 21 的連線封包,可以這樣做:
[root@linux ~]# tcpdump -i eth0 -nn port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:54:37.96 IP 192.168.1.11.1240 & 192.168.1.100.21: . ack 1 win 65535
01:54:37.96 IP 192.168.1.100.21 & 192.168.1.11.1240: P 1:21(20) ack 1 win 5840
01:54:38.12 IP 192.168.1.11.1240 & 192.168.1.100.21: . ack 21 win 65515
01:54:42.79 IP 192.168.1.11.1240 & 192.168.1.100.21: P 1:17(16) ack 21 win 65515
01:54:42.79 IP 192.168.1.100.21 & 192.168.1.11.1240: . ack 17 win 5840
01:54:42.79 IP 192.168.1.100.21 & 192.168.1.11.1240: P 21:55(34) ack 17 win 5840
瞧!這樣就僅提出 port 21 的資訊而已,且仔細看的話,你會發現封包的傳遞都是雙向的, client 端發出『要求』而 server 端則予以『回應』,所以,當然是有去有回啊! 而我們也就可以經過這個封包的流向來瞭解到封包運作的過程。 舉例來說:
我們先在一個終端機視窗輸入『 tcpdump -i lo -nn 』 的監聽,
再另開一個終端機視窗來對本機 (127.0.0.1) 登入『ssh localhost』
那麼輸出的結果會是如何?
[root@linux ~]# tcpdump -i lo -nn
1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
2 listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
3 11:02:54.253777 IP 127.0.0.1.32936 & 127.0.0.1.22: S )
win 32767 &mss 16396,sackOK,timestamp ,nop,wscale 2&
4 11:02:54.253831 IP 127.0.0.1.22 & 127.0.0.1.32936: S )
win 32767 &mss 16396,sackOK,timestamp 6681316,nop,
5 11:02:54.253871 IP 127.0.0.1.32936 & 127.0.0.1.22: . ack 1 win 8192 &nop,
nop,timestamp 6681316&
6 11:02:54.272124 IP 127.0.0.1.22 & 127.0.0.1.32936: P 1:23(22) ack 1 win 8192
&nop,nop,timestamp 6681316&
7 11:02:54.272375 IP 127.0.0.1.32936 & 127.0.0.1.22: . ack 23 win 8192 &nop,
nop,timestamp 6681334&
上表顯示的頭兩行是 tcpdump 的基本說明,然後:
第 3 行顯示的是『來自 client 端,帶有 SYN 主動連線的封包』,
第 4 行顯示的是『來自 server 端,除了回應 client 端之外(ACK),還帶有 SYN 主動連線的標誌;
第 5 行則顯示 client 端回應 server 確定連線建立 (ACK)
第 6 行以後則開始進入資料傳輸的步驟。
從第 3-5 行的流程來看,熟不熟悉啊?沒錯!那就是&&的基礎流程啦!夠有趣吧! 不過 tcpdump 之所以被稱為駭客軟體之一可不止上頭介紹的功能吶! 上面介紹的功能可以用來作為我們主機的封包連線與傳輸的流程分析, 這將有助於我們瞭解到封包的運作,同時瞭解到主機的防火牆設定規則是否有需要修訂的地方。更神奇的使用要來啦!如果我們使用 tcpdump 在 router 上面監聽『明碼』的傳輸資料時, 例如 FTP 傳輸協定,你覺得會發生什麼問題呢? 我們先在主機端下達『 tcpdump -i lo port 21 -nn -X 』然後再以 ftp 登入本機,並輸入帳號與密碼, 結果你就可以發現如下的狀況:
[root@linux ~]# tcpdump -i lo -nn -X 'port 21'
a28 86 7f00 0001
E..H*(@.@.......
7f00 ab 5c d825
.........U!I./.%
fe3c 0a 0e2e 0b67
.....&.........g
0e2e 0b61 76 20
...a220.(vsFTPd.
322e 302e a
d34b 59 7f00 0001
E..A.K@.@.iY....
7f00 0001 80ab c d825 d
........./.%.U!]
fe35 0a 0e2e 1b37
.....5.........7
0e2e 0b67 64 6d74 d
...gUSER.dmtsai.
a d34f 4c 7f00 0001
E..J.O@.@.iL....
7f00 0001 80ab c d832 f
........./.2.U!.
fe3e 0a 0e2e 3227
.....&........2'
0e2e 1b38 6d 77
...8PASS.mypassw
6f72 f75 0d0a
ordisyou..
上面的輸出結果已經被簡化過了,你必須要自行在你的輸出結果當中搜尋相關的字串才行。 從上面輸出結果的特殊字體中,我們可以發現『該 FTP 軟體使用的是 vsftpd ,並且使用者輸入 dmtsai 這個帳號名稱,且密碼是 mypasswordisyou』 嘿嘿!你說可不可怕啊!如果使用的是明碼的方式來傳輸你的網路資料? 所以我們才常常在講啊,網路是很不安全低!另外你得瞭解,為了讓網路介面可以讓 tcpdump 監聽,所以執行 tcpdump 時網路介面會啟動在 『錯亂模式 (promiscuous)』,所以你會在 /var/log/messages 裡面看到很多的警告訊息, 通知你說你的網路卡被設定成為錯亂模式!別擔心,那是正常的。 至於更多的應用,請參考 man tcpdump 囉!
例題:如何使用 tcpdump 監聽 (1)來自 eth0 介面卡且 (2)通訊協定為 port 22 ,(3)目標來源為 192.168.1.100 的封包資料?答:
tcpdump -i eth0 -nn 'port 22 and src host 192.168.1.100'
除了 tcpdump 這個軟體之外,其實你還可以使用 ethereal 這個好用的網路流量分析軟體吶! ethereal 分為文字介面與圖形介面,文字介面的用法與 tcpdump 相當的類似,不過他的指令名稱為 tethereal 就是了。因為用法差不多,所以建議您直接使用 man tethereal 查閱吧! 在 CentOS 上原本就有 ethereal 了,所以請拿出光碟來安裝即可喔! 需要安裝 ethereal 與 ethereal-gnome 才行吶!啟動的方法很簡單,你必須要在 X Window 底下,先開啟一個終端機,然後直接輸入 ethereal 後, 就會出現如下的畫面了:圖五、ethereal 使用範例圖簡單的作法,你可以點選如上圖顯示的那個按鈕,會出現挑選監聽的介面視窗,如下所示:圖六、ethereal 使用範例圖你應該選擇要監聽的介面,在這裡因為是測試用的,所以鳥哥使用的是 lo 這個內部介面, 你當然應該要選擇你自己的網路介面才是。然後按下 start 後,就會出現開始偵測的畫面了:圖七、ethereal 使用範例圖在這個畫面當中你可以看到很多類型的封包協定,在等你處理完畢後,就可以按下『stop』結束監聽, 而開始進入如下的封包分析畫面。圖八、ethereal 使用範例圖封包分析畫面共分為三大區塊,如上圖所示,第一區塊主要顯示的是封包的標頭資料, 內容就有點類似 tcpdump 的顯示結果,第二區塊則是詳細的表頭資料, 包括訊框的內容、通訊協定的內容以及 socket pair 等等資訊。 第三區塊則是 16 進位與 ASCII 碼的顯示結果。透過這個 ethereal 您就可以一口氣得到所需要的所有封包內容啦! 而且還是圖形介面的,很方便吧!透過在第一區塊選擇不同的封包,就能夠查閱每個封包的資料內容囉!
nc, netcat
這個 nc 可以用來作為某些服務的檢測,因為他可以連接到某個 port 來進行溝通, 此外,還可以自行啟動一個 port 來傾聽其他用戶的連線吶!非常的不錯用! 如果在編譯的時候給予『GAPING_SECURITY_HOLE』參數的話,嘿嘿! 這個軟體還可以用來取得用戶端的 bash 哩!可怕吧!我們的 CentOS 比較人性化,並沒有給予上面的參數,所以我們不能夠用來作為駭客軟體~ 但是用來取代 telnet 也是個很棒的功能了!(有的系統將執行檔改名為 netcat 啦!)
[root@linux ~]# nc [IP|host] [port]
[root@linux ~]# nc -l -p [port]
-l :作為監聽之用,亦即開啟一個 port 來監聽用戶的連線;
-p :開啟的這個 port number
範例一:連接本地端的 port 25 查閱相關訊息
[root@linux ~]# nc localhost 25
localhost.localdomain [127.0.0.1] 25 (smtp) open
220 pc.dm.tsai ESMTP Postfix
ehlo localhost
250-pc.dm.tsai
250-PIPELINING
這個最簡單的功能與 telnet 幾乎一樣吧!可以去檢查某個服務啦!不過,更神奇的在後面, 我們可以建立兩個連線來傳訊喔!舉個例子來說,我們先在 client 端的地方啟動一個 port 來進行傾聽:
範例二:啟動一個 port 來監聽使用者的連線要求
[root@linux ~]# nc -l -p 20000
# 啟動一個 port 20000
在主機上,如果此時使用 netstat -tlnp
# 就可以看到系統上多出來一個 port 20000 在傾聽使用者的連線喔!
然後在主機端的地方,也利用 nc 來連線到用戶端,並且輸入一些指令看看喔!
[root@linux ~]# nc localhost 20000
&==這裡可以開始輸入字串了!
此時,在主機端我們可以打入一些字,你會發現在 client 端會同時出現你輸入的字眼吶! 如果你同時給予一些額外的參數,例如利用標準輸入與輸出 (stdout, stdin) 的話, 那麼就可以透過這個連線來作很多事情了! 當然 nc 的功能不只如此,你還可以發現很多的用途喔! 請自行到您主機內的 /usr/share/doc/nc-1.10/scripts 目錄下看看這些 script ,有幫助的吶! 不過,如果你需要額外的編譯出含有 GAPING_SECURITY_HOLE 功能, 以使兩端
阅读(...) 评论()}

我要回帖

更多关于 mysqldump w 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信