软件定义网络(SDN)学习笔记(0)--wireshark抓包分析

SDN学习目录

SDN学习笔记(0)–wireshark抓包分析

SDN学习笔记(1)–iPerf和Netperf性能测试

SDN学习笔记(2)–Scapy交互式数据处理与Postman HTTP请求测试

SDN学习笔记(3)–OVS系统架构

SDN学习笔记(5)–OpenDaylight控制器

简单网络命令

1. ifconfig

ifconfig用于显示、设置、启动和停止网络设备。通过此命令能够显示出正在使用的计算机的IP地址、子网掩码和默认网关等。当网络环境发生改变时可通过此命令对网络进行相应的配置。ifconfig命令的格式和参数解释如下:

  • 命令格式:ifconfig [网络设备] [参数]
  • 命令参数如下表所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# ifconfig # 查看网络设备信息
eth0 Link encap:Ethernet HWaddr fa:16:3e:22:f1:7c
inet addr:30.0.0.96 Bcast:30.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::f816:3eff:fe22:f17c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:2402 errors:0 dropped:0 overruns:0 frame:0
TX packets:2390 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:190993 (190.9 KB) TX bytes:4116702 (4.1 MB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:880 (880.0 B) TX bytes:880 (880.0 B)
eth0表示第一块网卡。
HWaddr表示网卡的物理地址即MAC地址。
inet addr表示网卡的IPv4地址。
inet6 addr表示网卡的IPv6地址。
Bcast表示网卡的广播地址。
Mask表示子网掩码地址。
UP表示网卡开启状态。
RUNNING表示网卡的网线被接上。
MULTICAST表示支持组播。
MTU表示最大传输单元。
RX packets、TX packets表示接收、发送数据包情况统计。
RX byte、TX bytes表示接收、发送数据字节数统计信息。
lo表示主机的回环地址。一般是用来测试一个网络程序时又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口,比如把httpd服务器指定到回坏地址后,在浏览器输入127.0.0.1就能看到你所架WEB网站,但只有您能看得到,局域网的其它主机或用户无从知道。

# ifconfig eth0 down # 关闭网卡
# ifconfig eth0 up # 开启网卡
# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255 # 配置IP地址等信息

note: 机器重启后,配置的IP地址就失效了,若想将配置信息永久地存的电脑里,需要修改网卡的配置文件。

2. ping

ping命令用于检查网络是否通畅和网络连接速度。简单地说,网络上的机器都有唯一确定的IP地址,给目标IP地址发送一个数据包,就会返回一个同样大小的数据包,根据返回的数据包可以确定目标主机是否存在,可以初步判断网络是否通畅以及连接速度等信息。根据数据包返回时间和丢包率,可以大致判断出网络是否稳定。Ping的返回异常信息有“Request Timed Out”、“Destination Net Unreachable”、“Bad IP address”和“Source quench received”:
(1) Request Timed Out表示对方主机可以到达但是连接超时,这种情况通常是对方拒绝接收你发给它的数据包而造成的数据包丢失。原因可能是对方装有防火墙。
(2) Destination Net Unreachable表示对方主机不存在或者没有跟对方建立连接。
(3) Bad IP address表示可能没有连接到DNS服务器所以无法解析这个IP地址,也可能是IP地址不存在。
(4) Source quench received表示对方或中途的服务器繁忙无法回应。
说明:“destination host unreachable”和“time out”的区别:如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时候会出现“time out”,如果路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。
ping命令的格式和参数解释如下:

  • 命令格式:
    ping [参数] [主机名或IP地址]
  • 命令参数如下表所示:

1
2
# ping 127.0.0.1 #
# ping -c 5 www.xxx.com # -c 5表示在发送5个数据包后停止。

note1: ping本网网关或本网IP地址,可以检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常(在非局域网中这一步骤可以忽略)。

3. traceroute命令

traceroute是用来显示源主机到目标主机之间所经过的网关的命令。traceroute命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。首先,traceroute发送一个TTL是1的IP数据包到目的地,当路径上的第一个路由器收到这个数据包时,TTL将会减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并返回一个ICMP time exceeded消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址)。traceroute收到这个消息后,便知道这个路由器存在于路径上,接着traceroute再发送一个TTL是2的数据包,继而发现第2个路由器。依此规律,traceroute每次将发送的数据包的TTL加1来发现下一个路由器,一直持续到某个数据包抵达目的地。当数据包到达目的地后,该主机则不会返回ICMP time exceeded消息,此时traceroute通过UDP数据包向不常见端口(30000以上)发送数据包,因此会收到ICMP port unreachable消息,故可判断到达目的地。
traceroute命令的格式和参数解释如下:

  • 命令格式:
    traceroute [参数] [主机]
  • 命令参数如下表所示:

1
2
3
4
5
# sudo su
# apt-get install traceroute # 安装
# traceroute www.baidu.com # 追踪网络数据包的路由途径,执行结果如下图所示
# traceroute -m 10 www.baidu.com # 设置路由追踪10条,即只发回通过10个网关的信息
# traceroute -w 3 www.baidu.com # 把对外发探测包的等待响应时间设置为3秒

4. route命令

route用于显示和操作IP路由表,它的主要作用是创建静态路由。在Linux系统中,设置路由通常是为了解决以下问题:Linux系统在一个局域网中,局域网中有一个网关,若要让机器访问Internet,那么就需要将网关的IP地址设置为Linux机器的默认路由。route命令的格式和参数解释如下:

  • 命令格式:
    route [-f] [-p] [command] [destination] [mask netmask] [gateway] [metric] [if interface]
  • 命令参数如下表所示:

1
2
3
4
5
6
7
8
# route
openlab@openlab:~/Desktop$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 30.0.0.1 0.0.0.0 UG 0 0 0 eth0
default 30.0.0.1 0.0.0.0 UG 100 0 0 eth0
30.0.0.0 * 255.255.255.0 U 0 0 0 eth0
169.254.169.254 30.0.0.1 255.255.255.255 UGH 0 0 0 eth0
  • Destination:表示目标网段或主机。
  • Gateway:表示网关地址,“*”表示目标是本主机所属的网络,不需要路由。
  • Genmask:表示网络掩码。
  • Flags:表示标记。常用标记如下:
    • U表示路由是活动的
    • H表示目标是一个主机
    • G表示路由指向网关
    • R表示恢复动态路由产生的表项
    • D表示由路由的后台程序动态地安装
    • M表示由路由的后台程序修改
    • !表示拒绝路由。
  • Metric:表示路由距离,到达指定网络所需的中转数(Linux内核中没有使用)。
  • Ref:表示路由项引用次数(Linux内核中没有使用)。
  • Use:表示此路由项被路由软件查找的次数。
  • Iface:表示该路由表项对应的输出接口。
    1
    2
    3
    4
    5
    6
    # route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 # 添加网关
    # route del -net 224.0.0.0 netmask 240.0.0.0

    # route add -net 192.168.62.0 netmask 255.255.255.0 gw 192.168.1.1 # 添加一条路由(发往192.168.62这个网段的全部要经过网关192.168.1.1)

    # route del -net 192.168.122.0 netmask 255.255.255.0 # 删除一条路由 删除的时候不用写网关

    5. IP

    ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。它能够替代一些传统的网络管理工具,例如ifconfig、route等,使用权限为超级用户,ip命令的格式和参数解释如下:
  • 命令格式:
    ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
  • 命令参数:
    OPTIONS是一些修改ip行为或者改变其输出的选项。所有的选项都是以-字符开头,分为长、短两种形式。
    1
    2
    3
    4
    5
    # ip link list # 查看网络设备的运行状态
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether fa:16:3e:50:89:7f brd ff:ff:ff:ff:ff:ff
  • lo表示主机的回环地址。
  • eth0表示第一块网卡。
  • UP表示网卡开启状态。
  • MULTICAST表示支持组播。
  • mtu表示最大传输单元。
  • link/ether表示MAC地址。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # ip -s link list # 查看更加详细的网络设备信息
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes packets errors dropped overrun mcast
    880 16 0 0 0 0
    TX: bytes packets errors dropped carrier collsns
    880 16 0 0 0 0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether fa:16:3e:50:89:7f brd ff:ff:ff:ff:ff:ff
    RX: bytes packets errors dropped overrun mcast
    378682 3605 0 0 0 0
    TX: bytes packets errors dropped carrier collsns
    2422264 2317 0 0 0 0
  • RX packets、TX packets表示接收、发送数据包情况统计。
  • RX bytes、TX bytes表示接收、发送数据字节数统计信息。
    1
    2
    3
    4
    # ip addr list # 查看ip信息
    # ip link set eth0 down # ip link list命令
    # ip link set eth0 up # 开启eth0网卡
    # route add default gw 30.0.1.1 # 设置网关
  • inet表示网卡的IPv4地址。
  • inet6表示网卡的IPv6地址。

    note: 使用ip命令关闭网卡后,默认路由也被删除了,而使用ip命令启用网卡时,并不会配置路由,所以将无法ping通公网地址,故需要配置路由。

6. netstat命令

netstat是一个监控TCP/IP网络的非常有用的命令,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。它用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的Web服务有没有起来,你可以查看80端口有没有打开。netstat命令的格式和参数解释如下:

  • 命令格式:
    netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][—ip]
  • 命令参数如下表所示:
    1
    2
    3
    4
    # netstat -a # 查看所有端口信息
    # netstat -at # 查看TCP连接
    # netstat -l # 查看所有处于监听状态的Sockets
    # netstat -ap | grep ssh # 查看程序运行的端口

    7. tcpdump命令

    tcpdump是根据使用者的定义对网络上的数据包进行截获的包分析工具。tcpdump凭借强大的功能和灵活的截取策略,成为类UNIX系统下用于网络分析和问题排查的首选工具。tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤。
  • 命令格式:
    tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
    [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
    [ -T 类型 ] [ -w 文件名 ] [表达式 ]
  • 命令参数:

tcpdump命令常用参数如下:

1
2
3
4
5
6
# tcpdump -i eth0 # 进行抓包
# ping www.xxxx.com # 在打开一个窗口进行网络请求,可看到抓包信息
# tcpdump -i eth0 tcp port 80 # 抓取端口为80的TCP协议的数据信息
# tcpdump-i eth0 tcp # 抓取TCP协议的数据信息,并访问网址:www.xxx.com
# tcpdump -i eth0 -w tcpdump_package.pcap # 该命令作用是将tcupdump抓到的网络包保存到tcpdump_package.pcap文件中,命名规则为:文件名.pcap。
# tcpdump -r tcpdump_package.pcap # 该命令作用是将保存在tcpdump_package.pacp中的抓包信息读取出来。

练习题

下面(B)命令用于测试网络是否连通。

  • A. ifconfig
  • B. ping
  • C. ftp
  • D. route

下列相关route命令的使用错误的是(B)

  • A. 添加路由:route add-net 192.168.1.0 netmask - 255.255.255.0 gw 192.168.1.1
  • B. 删除路由:route del-net 192.168.1.0
  • C. 添加默认网关:route add default gw 192.168.120.240
  • D. 添加路由:route add-net 192.168.1.0/24 dev eth0

下面输出信息解释错误的是(D)

  • A. HWaddr表示网卡的物理地址即MAC地址。
  • B. inet addr表示网卡的IP地址。
  • C. MTU表示最大传输单元。
  • D. RX packets、TX packets表示接收、发送数据字节数统计信息。

判断: 使用ifconfig命令配置主机信息后,信息将永久保存在电脑里。×

判断: traceroute -m 4 www.xxx.com表示只发回通过4个网关的信息。√

下列关于ip命令理解错误的是(B)

  • A. ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,它能够替代一些传统的网络管理工具,例如ifconfig、route等。
  • B. ip命令支持的操作有add、delete、show和link。
  • C. 可以使用ip addr add 192.168.17.30/24 dev eth0命令给主机配置IP地址。
  • D. 使用ip命令的neighbour选项,可以查看接入你所在的局域网的设备的MAC地址。

关于tcpdump命令理解错误的是(B)

  • A. tcpdump支持对网络层、协议、主机、网络或端口的过滤。
  • B. tcpdump -i eth1 ‘((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))’,表示抓取所有经过eth1,目的地址是192.168.1.254和192.168.1.200,端口是80的TCP数据。
  • C. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包。
  • D. 表达式单元之间可以使用操作符” and / && / or / || / not / ! “进行连接,从而组成复杂的条件表达式。

下面对netstat的输出结果理解正确的是(D)

  • A. Active Internet connections表示TCP连接;Active UNIX domain sockets表示Unix域套接口。
  • B. State:表示连接状态,LISTENING表示正在侦听端口,等待建立连接。
  • C. Proto:表示使用的通信协议。
  • D. 以上均正确

判断: netstat是一个网络连接端扫描软件,用来扫描电脑上开放的端口,确定哪些服务运行在哪些端口,并且推断出计算机运行的操作系统。×

判断: 使用括号”()”可以改变tcpdump的表达式的优先级 √

Wireshark抓包分析工具

Wireshark是一个免费开源的网络数据包分析软件。用于截取网络数据包并尽可能显示出最为详细的网络数据包数据。为了安全考虑,Wireshark只能查看封包,而不能修改封包的内容,或者发送封包。Wireshark能够对大部分局域网协议进行解析,具有界面简单、操作方便、实时显示捕获数据的优点。Wireshark不是入侵侦测系统,对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示。然而,仔细分析Wireshark撷取的封包能够帮助使用者对于网络行为有更清楚的了解。Wireshark的用途很广,网络管理员可以使用Wireshark来检测网络问题,网络安全工程师可以使用Wireshark来检查资讯安全相关问题,开发者可以使用Wireshark来为新的通讯协议除错,普通使用者可以使用Wireshark来学习网络协议的相关知识。
在使用Wireshark工具时,可以按如下流程进行:

  1. 确定Wireshark的位置。即在哪执行wireshark命令,如果没有一个正确的位置,启动Wireshark后会花费很长的时间捕获一些与自己无关的数据。
  2. 选择捕获接口。一般都是选择连接到Internet网络的接口,这样才可以捕获到与网络相关的数据。否则,捕获到的其它数据对自己也没有任何帮助。
  3. 使用捕获过滤器。通过设置捕获过滤器,可以避免产生过大的捕获文件。这样用户在分析数据时,也不会受其它数据干扰。而且,还可以为用户节约大量的时间。
  4. 使用显示过滤器。通常使用捕获过滤器过滤后的数据,往往还是很复杂。为了使过滤的数据包再更细致,此时使用显示过滤器进行过滤。
  5. 使用着色规则。通常使用显示过滤器过滤后的数据,都是有用的数据包。如果想更加突出的显示某个会话,可以使用着色规则高亮显示。
  6. 构建图表。如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以很方便的展现数据分布情况。
  7. 重组数据。Wireshark的重组功能,可以重组一个会话中不同数据包的信息,或者是一个重组一个完整的图片或文件。由于传输的文件往往较大,所以信息分布在多个数据包中。为了能够查看到整个图片或文件,这时候就需要使用重组数据的方法来实现。

    环境

控制器:Ubuntu14.03桌面版,Floodlight1.0;CPU:1,内存:2GB,磁盘:20GB

交换机:Ubuntu14.03桌面版,OVS2.3.1;CPU:1,内存:2GB,磁盘:20GB

基本使用步骤

1
2
# apt-get install wireshark # root用户下安装
$ sudo wireshark # 普通用户下打开wireshark主界面,这里权限的问题,root打不开,普通用户无法获得网卡

步骤 1 选择需要抓包的网卡

Wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡,请按下面的方式选择网卡:

  • 方式一:选择网卡“eth0”,单击开始按钮
  • 方式二:1)在菜单栏选择”Capture -> Interfaces”,进入选择网卡的页面;2)选择网卡“eth0”,单击“Start”,进入抓包页面

步骤 2 单击浏览器图标,打开浏览器,在浏览器上访问www.sina.com.cn,进行抓包

步骤 3 单击红色停止按钮停止抓包,抓包结果如下图所示

图中四个区域分别为:

  1. 为DISPLAY FILTER(显示过滤器),显示过滤器用于查找捕捉记录中的内容。
  2. 为PACKET LIST PANE(封包列表),封包列表中显示所有已经捕获的封包。可以看到发送或接收方的MAC/IP地址、TCP/UDP端口号、协议或封包的内容。
  3. 为PACKET DETAILS PANE(封包详细信息):这里显示的是在封包列表中被选中项目的详细信息。
  4. 为DISSECTOR PANE(16进制数据):“解析器”在Wireshark中也被叫做“16进制数据查看面板”。这里显示的内容与“封包详细信息”中相同,只是改为以16进制的格式表述。

步骤 4 根据抓包结果,分析抓包数据

  • 在封包列表部分选择一条TCP协议数据,如下图所示。
  • 在封包列表部分选择一条TCP协议数据,如下图所示。

图中:

  • Frame:表示物理层数据帧概况。
  • Ethernet II:表示数据链路层以太网帧头部信息。
  • Internet Protocol Version 4:表示互联网IP包头信息。
  • Transmission Control Protocol:表示传输层数据段头部信息,此处为TCP。

图中:

  • 数据链路层显示有源MAC地址,目的MAC地址。
  • 网络层IP的版本信息显示为IPv4。协议为TCP。源IP地址30.0.0.93即本机IP地址,目的IP地址10.168.16.15即远端服务器地址。
  • 源端口为5901,目的端口为52356。

步骤 5 过滤报文信息

  • 过滤源IP地址
    • 如查找源地址为30.0.0.93的报文,则在过滤框中输入ip.src==30.0.0.93进行过滤
  • 过滤目的IP地址
    • 如查找目的地址为10.168.16.15的报文,则在过滤框中输入ip.dst==10.168.16.15进行过滤
  • 过滤端口
    • 如过滤52356端口,则在过滤框中输入tcp.port==52356||udp.port==52356
  • 过滤协议
    • 如过滤TCP的协议,则在过滤框中输入协议名tcp进行过滤
  • 使用连接符and过滤。
    • 过滤两种条件时,使用and连接,如过滤ip为30.0.0.93并且为TCP协议的报文,则在过滤框中输入ip.src==30.0.0.93 and tcp进行过滤,如下图所示。步骤 6 保存Wireshark抓包数据。

捕获的数据信息可以保存在文件中,这样就可以随时在Wireshark中打开此文件进行分析,而无需再次捕获同样的数据。关闭数据捕获屏幕或退出Wireshark时,系统会提示你保存信息

练习题

下面关于Wireshark说法错误的是(D)

  • A. 捕获过滤器用来过滤捕获的封包,以免捕获太多的记录。
  • B. 封包列表中显示所有已经捕获的封包。可以看到发送或接收方的MAC/IP地址、TCP/UDP端口号、协议或封包的内容。
  • C. 显示过滤器用来告诉Wireshark只显示那些符合过滤条件的数据包。
  • D. Wireshark能够对大部分局域网协议进行解析,能够查看、修改封包的内容,具有界面简单、操作方便、实时显示捕获数据的优点。

下面关于Wireshark的过滤表达式描述错误的是(B)

  • A. 过滤ip为10.0.1.1并且为http协议的报文,表达式为:ip.src==10.0.1.1 and http。
  • B. 如果没有特别指明来源或目的地,则默认使用源地址进行过滤。
  • C. 否(“not”)具有最高的优先级,或(“or”)和与(“and”)具有相同的优先级,运算时从左至右进行。
  • D. 对目的地址为192.168.0.1的包的过滤,表达式为:ip.dst eq 192.168.0.1。

判断:封包列表的面板中显示:编号、时间戳、源地址、目标地址、协议、长度以及封包信息,不同的协议用了不同的颜色显示,也可以自己修改这些显示的颜色规则。 √

判断:Wireshark的捕捉过滤器支持协议过滤和内容过滤。×