Linux tcpdump和wireshark(七)_tcpdump将pcap转换为wav-程序员宅基地

技术标签: Network  

一 Linux抓包原理

  Linux抓包是通过注册一种虚拟的底层网络协议来完成对网络报文(准确的说是网络设备)消息的处理权。当网卡接收到一个网络报文之后,它会遍历系统中所有已经注册的网络协议,例如以太网协议、x25协议处理模块来尝试进行报文的解析处理,这一点和一些文件系统的挂载相似,就是让系统中所有的已经注册的文件系统来进行尝试挂载,如果哪一个认为自己可以处理,那么就完成挂载。
  当抓包模块把自己伪装成一个网络协议的时候,系统在收到报文的时候就会给这个伪协议一次机会,让它来对网卡收到的报文进行一次处理,此时该模块就会趁机对报文进行窥探,也就是把这个报文完完整整的复制一份,假装是自己接收到的报文,汇报给抓包模块。
  tcpdump简单而强大,抓出来的报文,没有一目了然的特点。wireshark用着不多,习惯了Linux下的窗口,不准备学习wireshark,只用来解析tcpdump报文。
  默认情况下,tcpdump不会抓取本机内部通讯的报文。根据网络协议栈的规定,对于报文,即使是目的地是本机,也需要经过本机的网络协议层,所以本机通讯肯定是通过API进入了内核,并且完成了路由选择。
  如果要使用tcpdump抓取其他主机MAC地址的数据包,必须开启网卡混杂模式,所谓混杂模式,用最简单的语言说就是让网卡抓取任何经过它的数据包,不管这个数据包是不是发给它或者是它发出的。一般而言,Unix不会让普通用户设置混杂模式,因为这样可以看到别人的信息,比如telnet的用户名和密码,这样会引起一些安全上的问题,所以只有root用户可以开启混杂模式,开启混杂模式的命令是:ifconfig en0 promisc, en0是你要打开混杂模式的网卡。(ifconfig ens32 -promisc关闭)

二 tcpdump用法

1 语法

tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
        [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
        [ -i interface ] [ -m module ] [ -M secret ]
        [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
        [ -W filecount ]
        [ -E spi@ipaddr algo:secret,...  ]
        [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
        [ expression ]
  1. 类型的关键字

host(缺省类型): 指明一台主机,如:host 210.27.48.2
net: 指明一个网络地址,如:net 202.0.0.0
port: 指明端口号,如:port 23

  1. 确定方向的关键字

src: src 210.27.48.2, IP包源地址是210.27.48.2
dst: dst net 202.0.0.0, 目标网络地址是202.0.0.0
dst or src(缺省值)
dst and src

  1. 协议的关键字:缺省值是监听所有协议的信息包

fddi
ip
arp
rarp
tcp
udp

  1. 其他关键字

gateway
broadcast
less
greater

  1. 常用表达式:多条件时可以用括号,但是要用\转义

非 : ! or “not” (去掉双引号)
且 : && or “and”
或 : || or “or”

2 选项

-A:以ASCII编码打印每个报文(不包括链路层的头),这对分析网页来说很方便;
-a:将网络地址和广播地址转变成名字; 
-c<数据包数目>:在收到指定的包的数目后,tcpdump就会停止;
-C:用于判断用 -w 选项将报文写入的文件的大小是否超过这个值,如果超过了就新建文件(文件名后缀是1、2、3依次增加);
-d:将匹配信息包的代码以人们能够理解的汇编格式给出; 
-dd:将匹配信息包的代码以c语言程序段的格式给出; 
-ddd:将匹配信息包的代码以十进制的形式给出;
-D:列出当前主机的所有网卡编号和名称,可以用于选项 -i;
-e:在输出行打印出数据链路层的头部信息; 
-f:将外部的Internet地址以数字的形式打印出来; 
-F<表达文件>:从指定的文件中读取表达式,忽略其它的表达式; 
-i<网络界面>:监听主机的该网卡上的数据流,如果没有指定,就会使用最小网卡编号的网卡(在选项-D可知道,但是不包括环路接口),linux 2.2 内核及之后的版本支持 any 网卡,用于指代任意网卡; 
-l:如果没有使用 -w 选项,就可以将报文打印到 标准输出终端(此时这是默认); 
-n:显示ip,而不是主机名;
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名;
-N:不列出域名; 
-O:不将数据包编码最佳化; 
-p:不让网络界面进入混杂模式; 
-q:快速输出,仅列出少数的传输协议信息; 
-r<数据包文件>:从指定的文件中读取包(这些包一般通过-w选项产生); 
-s<数据包大小>:指定抓包显示一行的宽度,-s0表示可按包长显示完整的包,经常和-A一起用,默认截取长度为60个字节,但一般ethernet MTU都是1500字节。所以,要抓取大于60字节的包时,使用默认参数就会导致包数据丢失; 
-S:用绝对而非相对数值列出TCP关联数; 
-t:在输出的每一行不打印时间戳; 
-tt:在输出的每一行显示未经格式化的时间戳记; 
-T<数据包类型>:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议); 
-v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; 
-vv:输出详细的报文信息; 
-x/-xx/-X/-XX:以十六进制显示包内容,几个选项只有细微的差别,详见man手册; 
-w<数据包文件>:直接将包写入文件中,并不分析和打印出来;
expression:用于筛选的逻辑表达式;

3 命令实践

在这里插入图片描述

4 注意

  如果通信进程都处于同一个主机上,无论IP地址是任何地址,其数据都是只经过lo,不会经过其他的网卡。

四 wireshark解析报文

1 tcpdump保存

  将tcpdump抓的报文直接导入到文件中,使用- w选项,然后使用wireshark打开。

tcpdump -w a.pcap

2 过滤IP

ip.src eq 192.168.1.107  //源ip
ip.dst eq 192.168.1.107 //目的ip
ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP
ip.src eq 192.168.1.107 && ip.dst eq 192.168.1.107 //同时符合两个条件

3 过滤端口

tcp.port eq 80 或者 tcp.port == 80 // 不管端口是来源的还是目标的都显示
tcp.port eq 80 或者 udp.port eq 80
tcp.dstport == 80 // 只显tcp协议的目标端口80
tcp.srcport == 80 // 只显tcp协议的来源端口80
udp.port eq 15000
tcp.port >= 1 and tcp.port <= 80 //过滤端口范围

4 过滤协议

tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
ssl
oicq
bootp   //dhcp
!arp  或者  not arp //排除arp包

五 tcpdump源码剖析

  tcpdump源码分析(2)——抓包原理https://blog.csdn.net/notbaron/article/details/79735414

六 winpcap语法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/essity/article/details/82811199

智能推荐

nagiosQL访问时报错PHP message: PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_re-程序员宅基地

文章浏览阅读3.2k次。nagiosQL安装环境:CentOS release 6.4 (Final)php-5.5.4nagiosql_320nginx version: nginx/1.2.3 安装一切正常,当访问nagiosQL界面时会提示:PHP Deprecated: preg_replace(): The /e modifier is deprecat_php message: php deprecated

海思sdk问题_海思sdk里面的sample在make时出现链接错误-程序员宅基地

文章浏览阅读1.1k次。make[2]: Entering directory '/hisi/soft/board/Hi3516A_SDK_V1.0.7.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-2.0.1'make[2]: *** No targets specified and no makefile found. Stop.make[2]: Leaving dir_海思sdk里面的sample在make时出现链接错误

tomcat 内存配置优化 Xms Xmx_不设置xmx xms-程序员宅基地

文章浏览阅读2.7k次。考虑一下这种场景,你开发了一个应用,它有十分优秀的布局设计,最新的特性以及其它的优秀特点。但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝。客户总是期望它们的应用应该有更好的性能。如果你在产品中使用了Tomcat服务器,那么这篇文章就会给你几方面来提升Tomcat服务器的性能。感谢ITWorld article给本文提供资源。经过沉思我已经知道了和早期版本相比最新的Tomcat提供更好的_不设置xmx xms

connection如何释放-程序员宅基地

文章浏览阅读1.3k次。可以把session与connection的使用关系分为三种 session使用的连接是被提供的,常常SessionFactory.openSession(connection,Interceptor?) session使用的连接被借给客户端,常常session.connection session通过connectionProvider.getConnection得到的连接..._sqlsessionfactory获取的connection用完如何释放

LTE的信道_lte各种信道-程序员宅基地

文章浏览阅读2.9k次,点赞7次,收藏36次。前言 信道是不同类型的信息,按照不同传输格式、用不同的物理资源承载的信息通道。根据信息类型的不同、处理过程的不同可将信道分为多种类型。 本文重点介绍LTE的逻辑信道、传输信道、物理信道等常见的信道类型,并和3G相应的信道类型作了比较,通过比较可以加深LTE信道结构的理解。最后给出LTE从逻辑信道到传输信道,再到物理信道的映射关系。依据不同的货物类型,采用不同的处理工..._lte各种信道

在python中最常见的:print的真正用法_print(*a, sep=' ')-程序员宅基地

文章浏览阅读751次。一、print()函数概述print() 方法用于打印输出,是python中最常见的一个函数。该函数的语法如下:print(*objects, sep=' ', end='\n', file=sys.stdout)参数的具体含义如下: objects --表示输出的对象。输出多个对象时,需要用 , (逗号)分隔。 sep -- 用来间隔多个对象。 end..._print(*a, sep=' ')

随便推点

AntV G6中动态数据提示框的实现_antv-g6弹窗-程序员宅基地

文章浏览阅读5.9k次,点赞12次,收藏17次。使用坐标变换实现antvG6中自定义tooltip_antv-g6弹窗

C++入门基础(十一) STL介绍_stl全称-程序员宅基地

文章浏览阅读473次。在学习完之间C++模板的相关知识之后,我们仿佛打开了一个新世界的大门,原来代码还可以这样用,但是问题又来了,即使是有模板了但是这个模板还要写出来,这样是不是太麻烦了,好像还没有到达懒的真正境界,那么为了满足大部分懒人的需要,惠普实验室来了一手绝活,他们将大量的函数模板、算法等等全部进行总结归纳,编写写成了一个巨大的仓库,这样程序员们在使用时只要调用相关函数接口便可以省下大把的头发,这个库就是我们长常说的STL标准模板库。_stl全称

python基础(一)_jetbrains pycharm 2017.2.3 x64-程序员宅基地

文章浏览阅读336次。1.简介python 汉译: 蟒蛇发展史: 于1989年 由荷兰人吉多·范罗苏姆。 第一个公开发行版发行于 1991 年。像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU General Public License) 协议。现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。Python 2...._jetbrains pycharm 2017.2.3 x64

Android广播机制_android 中的广播机制-程序员宅基地

文章浏览阅读855次。1.Android广播机制概述Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下:1.同一app内部的同一组件内的消息通信(单个或多个线程之间);2.同一app内部的不同组件之间的消息通信(单个进程);3.同一app具有多个进程_android 中的广播机制

Android中将webp格式图片转换为png和jpg(续)_手机图片webp转换jpg-程序员宅基地

文章浏览阅读7.8k次。上一篇《Android将webp格式图片转换为png格式方法》在app上线后,部分机型报出了bug,比如华为手机,会在包含静态库的页面中直接报错奔溃,经过反复调试发现网上下载的libweb.so 之前打包的时间有点早,对高版本的系统和cpu类型支持不好,所以在github上找了一个项目,配置到gradle:2.3.1,APP_ABI := all全CPU类型,相关SO压缩文件已经放到我的下载资源里_手机图片webp转换jpg

洛谷 P5487 【模板】线性递推+BM算法(BM+多项式取模)_洛谷 bm-程序员宅基地

文章浏览阅读907次。传送门代码:#include<bits/stdc++.h>#define ri register intusing namespace std;const int rlen=1<<18|1;inline char gc(){ static char buf[rlen],*ib,*ob; (ib==ob)&&(ob=(ib=buf)+fread..._洛谷 bm