IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 1.5.3 使用tcpdump观察ARP通信过程 -> 正文阅读

[系统运维]1.5.3 使用tcpdump观察ARP通信过程

使用tcpdump观察ARP通信过程


前言

本篇文章为笔者的读书笔记,未经允许请勿转载。如果对你有帮助记得点个赞(●’?’●)
本次实验是linux高性能服务器编程的第一个实验,目的在于了解ARP的运作过程
实验测试机是阿里云ECS服务器和本地虚拟机。不同于书本上,它的测试机是在同一局域网内。


开启服务机的echo服务

首先查看是否支持echo服务。/etc目录是Linux的配置目录,底下包含各种配置文件。这里的**/etc/service**文件记录了主机上可能用到的服务及常用端口号。

root@iZwz9e2t1qu6rzggq3tc0dZ:~# cat /etc/services | grep echo
echo		7/tcp
echo		7/udp
echo		4/ddp			# AppleTalk Echo Protocol

grep查找包含某字符串的行,前2行即echo服务,同时支持TCP和UDP。但是要查看系统上是否有该服务,得确认是否在对应端口上有监听套接字,因此用netstat命令,-l选项即listening,处于LISTEN(监听)状态的套接字,默认只会显示已连接的套接字。

root@iZwz9e2t1qu6rzggq3tc0dZ:~# netstat -l|grep echo 
root@iZwz9e2t1qu6rzggq3tc0dZ:~# 

可以看到没有echo进程监听,需要手动开启!

1. 安装openbsd-inetd

apt-get install openbsd-inetd

2. 打开/etc/initd.conf文件,按照注释中的示例添加echo服务

root@iZwz9e2t1qu6rzggq3tc0dZ:/# chmod u+w /etc/inetd.conf
root@iZwz9e2t1qu6rzggq3tc0dZ:/# vim /etc/inetd.conf

# /etc/inetd.conf:  see inetd(8) for further informations.
# 
# Internet superserver configuration database
#
#
# Lines starting with "#:LABEL:" or "#<off>#" should not
# be changed unless you know what you are doing!
#
# If you want to disable an entry so it isn't touched during
# package updates just comment it out with a single '#' character.
#
# Packages should modify this file by using update-inetd(8)
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
#:INTERNAL: Internal services
#discard                stream  tcp     nowait  root    internal
#discard                dgram   udp     wait    root    internal
#daytime                stream  tcp     nowait  root    internal
#time           stream  tcp     nowait  root    internal

echo stream tcp nowait root internal

#:STANDARD: These are standard services.

3.安装xinetd

apt-get install xinetd

4.配置echo文件,将disable由yes改为no

root@iZwz9e2t1qu6rzggq3tc0dZ:/# vim /etc/xinetd.d/echo

# default: off
# description: An xinetd internal service which echo's characters back to
# clients.
# This is the tcp version.
service echo
{
        disable         = no
        type            = INTERNAL
        id              = echo-stream
        socket_type     = stream
        protocol        = tcp
        user            = root
        wait            = no
}

# This is the udp version.
service echo
{
        disable         = no
        type            = INTERNAL
        id              = echo-dgram
        socket_type     = dgram
        protocol        = udp
        user            = root
        wait            = yes
}

5.重启xinetd

/etc/init.d/xinetd restart

再次检查,可以发现echo服务已经开启

root@iZwz9e2t1qu6rzggq3tc0dZ:/# netstat -l|grep echo
tcp6       0      0 [::]:echo               [::]:*                  LISTEN     
root@iZwz9e2t1qu6rzggq3tc0dZ:/# 

由于是阿里云服务器,不光系统要配置,安全组也要去配置
在这里插入图片描述
到目前位置服务器echo服务已经打开,本地虚拟机的打开方式除了最后一步其他都一样。
需要注意的是虚拟机的网络尽量选择桥接模式,这样可以节省时间。


实验开始

  • 在虚拟机上开启两个端口,一个监听一个测试
    在执行telnet命令前,先清除ARP缓存中与路由器对应的项,否则ARP通信不被执行,我们就无法抓取到期望的以太网帧。

  • 测试端口

root@ubuntu:/home/marvel# arp -a 
? (192.168.1.1) 位于 24:58:6e:5a:dd:78 [ether] 在 ens33
? (192.168.1.6) 位于 b0:fc:36:59:13:bf [ether] 在 ens33
root@ubuntu:/home/marvel# arp -d 192.168.1.1 //192.168.1.1是路由器的ip地址后面是对应的mac地址

清理缓存后打开监听端tcpdump,步骤要快点否则会被其他无用信息干扰

  • 监听端口
marvel@ubuntu:~$ sudo tcpdump arp -ent
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes

-e选项开启以太网帧头部信息的显示,-n选项使用IP地址(而非主机名)代表主机,-t选项关闭时间戳的显示。
后用telnet 连接服务器echo服务

  • 测试端口
root@ubuntu:/home/marvel# telnet 120.79.72.214 7
Trying 120.79.72.214...
Connected to 120.79.72.214.
Escape character is '^]'.
^]
telnet> q
Connection closed.

tcpdump抓取到的众多数据包中,只有最靠前的两个和ARP通信有关系:如下
marvel@ubuntu:~$ sudo tcpdump arp -ent
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
00:0c:29:1a:09:94 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.1.1 tell 192.168.1.7, length 28
24:58:6e:5a:dd:78 > 00:0c:29:1a:09:94, ethertype ARP (0x0806), length 60: Reply 192.168.1.1 is-at 24:58:6e:5a:dd:78, length 46
^C
2 packets captured
3 packets received by filter
0 packets dropped by kernel
marvel@ubuntu:~$ 

第一个数据包中,ARP通信的源端物理地址是00:0c:29:1a:09:94(虚拟机),目的端的物理地址是ff:ff:ff:ff:ff:ff,这是以太网的广播地址,用以表示整个LAN。该LAN上的所有机器都会收到并处理这样的帧。数值0x806是以太网帧头部的类型字段的值,它表示分用目标是ARP模块。该以太网帧的长度为42字节(实际上是46字节,tcpdump没有统计以太网帧尾部4字节的CRC字段),其中数据部分为28字节,由于以太网头部是14字节,所以前一个length比后一个length大14。。“Request”表示这是一个ARP请求,“who-has 192.168.1.1 tell 192.168.1.7”表示虚拟机要查询服务器的ip地址,因为所访问的远程主机并不在局域网内,所以找到的ip地址为路由器地址,由路由器来完成后续寻址。

第二个数据包中,ARP通信的源端物理地址是24:58:6e:5a:dd:78(路由器),目的端的物理地址是00:0c:29:1a:09:94(虚拟机),“Reply”表示这是一个ARP应答,“192.168.1.1 is-at 24:58:6e:5a:dd:78”表示路由器报告其物理地址。该以太网帧的长度为60字节(实际上是64字节)。

在这里插入图片描述

原理图

ARP工作原理:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址。此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。

此次实验原理图如下在这里插入图片描述
说明一下
ARP请求和应答是从以太网驱动程序发出的,而不是从ARP直接发出

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 11:42:18  更:2021-07-10 11:42:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/17 4:02:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码