Linux tcpdump和wireshark

版权声明:将不定期更新,如有任何疑问,欢迎留言!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! https://blog.csdn.net/essity/article/details/82811199

1 ifconfig

  ifconfig命令简单使用,打印出网卡信息,一般电脑上的网卡为有线网卡和无线网卡,以及本路回环地址:lo信息。

[sunjimeng@localhost ~]$ ifconfig         //未联网时的参数
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:4d:a3:cc  txqueuelen 1000  (Ethernet)
        RX packets 1914  bytes 174936 (170.8 KiB)
        RX errors 0  dropped 36  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 3246  bytes 281472 (274.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3246  bytes 281472 (274.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[sunjimeng@localhost ~]$ ifconfig                   //连接到有线网时的参数
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500                //mtu表示最大传输单元
        inet 192.168.117.128  netmask 255.255.255.0  broadcast 192.168.117.255
        inet6 fe80::20c:29ff:fe4d:a3cc  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:4d:a3:cc  txqueuelen 1000  (Ethernet)
        RX packets 1969  bytes 181974 (177.7 KiB)
        RX errors 0  dropped 36  overruns 0  frame 0
        TX packets 48  bytes 6324 (6.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 3590  bytes 310452 (303.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3590  bytes 310452 (303.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  1、en(Number)指的是网卡,可以看到目前这个网卡的物理地址(MAC地址)是 00:0c:29:4d:a3:cc。
  2、inet后表示ip地址,此网卡的ip地址是192.168.117.128,广播地址是192.168.117.255,掩码地址为255.255.255.0。
  3、lo是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。
  打开或关闭网卡:

[root@localhost sunjimeng]# ifconfig eno16777736 down
[root@localhost sunjimeng]# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 3598  bytes 311224 (303.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3598  bytes 311224 (303.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@localhost sunjimeng]# ifconfig eno16777736 up
[root@localhost sunjimeng]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:4d:a3:cc  txqueuelen 1000  (Ethernet)
        RX packets 2013  bytes 185705 (181.3 KiB)
        RX errors 0  dropped 36  overruns 0  frame 0
        TX packets 88  bytes 9726 (9.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 3602  bytes 311520 (304.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3602  bytes 311520 (304.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  ifconfig -a无论是否激活,显示所有配置的网络接口,不带参数的只显示已激活的网络接口。

2 Linux抓包原理

  Linux抓包是通过注册一种虚拟的底层网络协议来完成对网络报文(准确的说是网络设备)消息的处理权。当网卡接收到一个网络报文之后,它会遍历系统中所有已经注册的网络协议,例如以太网协议、x25协议处理模块来尝试进行报文的解析处理,这一点和一些文件系统的挂载相似,就是让系统中所有的已经注册的文件系统来进行尝试挂载,如果哪一个认为自己可以处理,那么就完成挂载。
  当抓包模块把自己伪装成一个网络协议的时候,系统在收到报文的时候就会给这个伪协议一次机会,让它来对网卡收到的报文进行一次处理,此时该模块就会趁机对报文进行窥探,也就是把这个报文完完整整的复制一份,假装是自己接收到的报文,汇报给抓包模块。

3 tcpdump与wireshark

  tcpdump简单而强大,抓出来的报文,没有一目了然的特点。wireshark用着不多,习惯了Linux下的窗口,不准备学习wireshark,只用来解析tcpdump报文。
  默认情况下,tcpdump不会抓取本机内部通讯的报文。根据网络协议栈的规定,对于报文,即使是目的地是本机,也需要经过本机的网络协议层,所以本机通讯肯定是通过API进入了内核,并且完成了路由选择。
  如果要使用tcpdump抓取其他主机MAC地址的数据包,必须开启网卡混杂模式,所谓混杂模式,用最简单的语言说就是让网卡抓取任何经过它的数据包,不管这个数据包是不是发给它或者是它发出的。一般而言,Unix不会让普通用户设置混杂模式,因为这样可以看到别人的信息,比如telnet的用户名和密码,这样会引起一些安全上的问题,所以只有root用户可以开启混杂模式,开启混杂模式的命令是:ifconfig en0 promisc, en0是你要打开混杂模式的网卡。(ifconfig ens32 -promisc关闭)

4 tcpdump用法

4.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”

4.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,而不是主机名; 
-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:用于筛选的逻辑表达式;

4.3 命令实践

在这里插入图片描述

4.4 注意

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

5 wireshark解析报文

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

6 tcpdump源码剖析

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

7 链接

  聊聊tcpdump与Wireshark抓包分析:https://www.jianshu.com/p/a62ed1bb5b20
  
  
  

猜你喜欢

转载自blog.csdn.net/essity/article/details/82811199