关闭

tcpdump工具使用(Android环境)

681人阅读 评论(0) 收藏 举报
分类:

常用命令
    Linux测试工具tcpdump命令用于监视TCP/IP连接并直接读取数据链路层的数据包头.可以指定哪些数据被监视,哪些空是要显示格式,如:
    tcpdump -i eth0        监视所有以太网上来往的通信
    tcpdump -i eth0 host hostname    监听主机名为hostname的以太网上来往的通信
    tcpdump -i eth0 -p    禁用promiscuous模式,即值关心本地主机通信
    tcpdump -i eth0 src host hostname    读取主机hostname发送的所有数据
    tcpdump -i eth0 dst host hostname    读取送到主机hostname的所有数据
    还可以监听通过指定网关的数据包    tcpdump -i eth0 gareway Gatewayname
    还可以监听某个端口的TCP或UDP数据包    tcpdump -i eth0 host hostname and porn 80    ; 如果希望只看到发送到该端口或者从该端口发送的数据,则使用src port或者dst port.
 
进阶一:表达式
    tcpdump有几种关键字.
    第一种是关于类型的关键字,主要包括host, net, port, 例如 host 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 . 默认是dst or src.
    第三种是协议的关键字,主要包括fddi, ip, arp, rarp, tcp, udp等类型.默认监听所有协议的信息包.
    其他关键字还有gateway, broadcast, less, greater.
    还有三种逻辑运算: 取非运算是 'not' '!', 与运算是 'and', '&&'; 或运算是 'or', '||'.
举些例子:
1)截获主机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 \)
2)如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
3)对本机的udp 123 端口进行监视
tcpdump udp port 123
    tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。
    
进阶二:选项
    Linux tcpdump的选项介绍:
-a将网络地址和广播地址转变成名字;
-d将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd将匹配信息包的代码以c语言程序段的格式给出;
-ddd将匹配信息包的代码以十进制的形式给出;
-e在输出行打印出数据链路层的头部信息;
-f将外部的Internet地址以数字的形式打印出来;
-l使标准输出变为缓冲行形式;
-n不把网络地址转换成名字;
-t在输出的每一行不打印时间戳;
-v输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv输出详细的报文信息;
-c在收到指定的包的数目后,tcpdump就会停止;
-F从指定的文件中读取表达式,忽略其它的表达式;
-i指定监听的网络接口;
-r从指定的文件中读取包(这些包一般通过-w选项产生);
-w直接将包写入文件中,并不分析和打印出来;
-T将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议;)
 
进阶三:输出结果
(1)数据链路层头信息
使用命令#tcpdump--ehosticeice是一台装有Linux的主机,她的MAC地址是0:90:27:58:AF:1AH219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:
 
21:50:12.847509eth0<8:0:20:79:5b:460:90:27:58:af:1aip60:h219.33357>;ice.telnet0:0(0)ack22535win8760(DF)分析:21:50:12是显示的时间,847509是ID号,eth0<表示从网络接口eth0接受该数据包,eth0>;表示从网络接口设备发送数据包,8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包.0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE.ip是表明该数据包是IP数据包,60是数据包的度,h219.33357>;ice.telnet表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口.ack22535表明对序列号是222535的包进行响应.win8760表明发送窗口的大小是8760.
 
(2)ARP包的TCPDUMP输出信息
使用命令#tcpdumparp得到的输出结果是:
22:32:42.802509eth0>;arpwho-hasroutetellice(0:90:27:58:af:1a)
22:32:42.802902eth0 分析:22:32:42是时间戳,802509是ID号,eth0>;表明从主机发出该数据包,arp表明是ARP请求包,who-hasroutetellice表明是主机ICE请求主机ROUTE的MAC地址。0:90:27:58:af:1a是主机ICE的MAC地址。
 
(3)TCP包的输出信息
用TCPDUMP捕获的TCP包的一般输出信息是:src>;dst:flagsdata-seqnoackwindowurgentoptionssrc>;dst:表明从源地址到目的地址,flags是TCP包中的标志信息,S是SYN标志,F(FIN),P(PUSH),R(RST)"."(没有标记);data-seqno是数据包中的数据的顺序号,ack是下次期望的顺序号,window是接收缓存的窗口大小,urgent表明数据包中是否有紧急指针.Options是选项.
 
(4)UDP包的输出信息
用TCPDUMP捕获的UDP包的一般输出信息是:route.port1>;ice.port2:udplenthUDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP,包的长度是lenth
 
进阶四:抓包
1.首先把附件中的tcpdump 用adb推到板子上.
2.adb shell tcpdump -p -vv -s 0 -w /sdcard/capture.pcap
3.按ctrl+c停止
4.adb pull /sdcard/capture.pcap d:\    导出该文件
5.用附件的WireShark打开该文件看数据包.

有道笔记连接: http://note.youdao.com/share/?id=2d304e691cb9113a70e17f88050fc912&type=note

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34650次
    • 积分:621
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:4篇
    • 译文:0篇
    • 评论:4条
    文章存档
    最新评论