python3发送Gratuitous ARP更新vip绑定关系
操作系统 :CentOS 7.6_x64
Python版本:3.9.12
FreeSWITCH版本 :1.10.9
高可用场景下,vip切换完成后需要发送arp广播更新ip和mac地址的绑定关系,如果不及时发广播,会导致tcp重连等问题。
今天记录下python3如何使用arp广播更新ip和mac地址的绑定关系,我将从以下几个方面进行展开:
- Gratuitous ARP及在keepalived中的使用
- 使用arping工具发送arp广播
- 使用python2和python3发arp广播
- 提供示例代码及运行效果视频
一、Gratuitous ARP及在keepalived中的使用
1、 Gratuitous ARP 介绍
关于Gratuitous ARP的介绍,可以参考这里:
https://wiki.wireshark.org/Gratuitous_ARP

其中,有一个作用正是我们需要的:
更新其他主机的 ARP 缓存表。
2、Gratuitous ARP在keepalived中的使用
2.1 安装keepalived
keepalived官网:https://keepalived.org/
CentOS 7.6_x64安装keepalived命令:
yum install keepalived
版本:1.3.5

2.2 配置keepalived
这里以freeswitch为例进行配置。
1) 主机
机器:192.168.137.32
vip:192.168.137.201
路径:/etc/keepalived/keepalived.conf
内容:
! Configuration File for keepalived
global_defs {
script_user root
enable_script_security
notification_email {
}
router_id FREESW
}
vrrp_script chk_fs {
script "/etc/keepalived/check.sh"
interval 2
timeout 3
weight -100
}
vrrp_instance VI_FREESW {
state BACKUP
interface enp0s3
virtual_router_id 201
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
notify_master "/etc/keepalived/notify.sh"
virtual_ipaddress {
192.168.137.201/24 dev enp0s3
}
track_script {
chk_fs
}
smtp_alert
}
2) 备机
机器:192.168.137.31
vip:192.168.137.201
路径:/etc/keepalived/keepalived.conf
内容:
! Configuration File for keepalived
global_defs {
script_user root
enable_script_security
notification_email {
}
router_id FREESW
}
vrrp_script chk_fs {
script "/etc/keepalived/check.sh"
interval 2
timeout 3
weight -20
}
vrrp_instance VI_FREESW {
state BACKUP
interface enp0s3
virtual_router_id 201
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.137.201/24 dev enp0s3
}
track_script {
chk_fs
}
smtp_alert
}
2.3、进程检测脚本
路径:/etc/keepalived/check.sh
内容:
#!/bin/bash ProcNumber=`ps aux|grep [f]reeswitch | wc -l` if [ $ProcNumber -le 0 ];then
echo "freeswitch is not run"
echo $(date +"%Y-%m-%d %H:%M:%S") "freeswitch exception, try restart \n" >> /etc/keepalived/check.log
freeswitch -nc -nonat
exit 1;
else
echo "freeswitch is running.."
exit 0;
fi
2.4 master状态通知脚本
路径:/etc/keepalived/notify.sh
内容:
#! /bin/bash echo $(date +"%Y-%m-%d %H:%M:%S") "current is master" >> /etc/keepalived/notify.log
2.5 关闭selinux
需要关闭selinux,否则回调脚本无法被调用。
临时关闭:
setenforce 0
永久关闭:
vi /etc/sysconfig/selinux
SELINUX=disabled
2.6 启动keepalived
启动keepalived服务及开机启动:
systemctl start keepalived
systemctl enable keepalived

2.7 keepalived发送arp广播
抓包命令:tcpdump -i enp0s3 arp -w arp.pcap
数据包打开效果:

运行效果视频可从如下渠道获取:
二、使用arping工具发送arp广播
arping工具可以发送arp广播,该工具需要使用root权限,否则广播无法发出去。
参考文档:
https://linux.die.net/man/8/arping
也可直接在控制台输入如下命令获取帮助文档:
man arping

示例如下:
ip addr add 192.168.137.202/24 dev enp0s3
arping -U 192.168.137.202 -I enp0s3 -c 5 -b
其中,第一条命令是添加vip,第二条命令是使用arping工具进行arp广播的发送:-c 5参数是发5个包。
抓包效果如下:

运行效果视频可从如下渠道获取:
三、使用python3发arp广播
python发送arp广播要使用rawsocket,需要具备root权限。
目前还没有找到直接使用python3发送arp广播的库,可以自己根据原理写一个,也可以基于前人的基础进行改造(目前选用的是这个)。有两个使用python2发送arping广播的库,这里先介绍下,稍后再描述改造方法。
1) arprequest库
只适用于python2,地址:
https://pypi.org/project/arprequest/
安装:
tar zxvf arprequest-0.3.tar.gz
cd arprequest-0.3
python setup.py build
python setup.py install
使用示例(py2ArpTest1.py):
import os
from arprequest import ArpRequest vip = "192.168.137.202"
dev = "enp0s3" os.system("ip addr add %s/24 dev %s" % (vip,dev)) ar = ArpRequest(vip,dev)
for i in range(5):
ar.request()
抓包结果示例:

运行效果视频可从如下渠道获取:
2) send_arp库
在GitHub上找到的一个库,是用python2写的,地址:
https://github.com/krig/send_arp.py
可以改造成兼容python3的版本,示例如下(py3ArpTest1.py):

完整代码可从如下渠道获取:
测试脚本如下(py3Test1.sh):
#! /bin/bash ip addr add 192.168.137.202/24 dev enp0s3 source /root/python39/env.sh
/root/python39/bin/python3.9 py3ArpTest1.py enp0s3 192.168.137.202 auto 192.168.137.202 255.255.255.255
关于在CentOS环境下如何使用python3.9可参考如下文章:
抓包效果如下:

四、资源下载
本文涉及资源可从如下渠道获取:

python3发送Gratuitous ARP更新vip绑定关系的更多相关文章
- ARP协议具体解释之Gratuitous ARP(免费ARP)
ARP协议具体解释之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP.无故ARP.Gratuitous ARP不同于 ...
- ARP协议详解之Gratuitous ARP(免费ARP)
ARP协议详解之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP,无故ARP.Gratuitous ARP不同于一般 ...
- ARP协议抓包之帧长度和Gratuitous ARP的问题
用Winpcap编程构造ARP包选择网卡并发出,遇到若干问题,学到了许多新知识,但是有的还尚未解决,在这里记录下没解决的和解决的问题. 先来看下ARP协议的格式,ARP字段有28个字节,发到以太网中还 ...
- ARP、Proxy ARP、Gratuitous ARP
Proxy ARP 什么是Proxy ARP? 一个主机A(通常是路由器)有意应答另一个主机B的ARP请求(ARP requests).主机A通过伪装其身份,承担起将分组路由到真实目的地的责任.代理A ...
- python3对比python2的更新点
python3对比python2的更新点: Python2官方基础模块:urllib2 第三方功能包:requests python3中urllib库和urilib2库合并成了urllib库. 其中u ...
- Winform将FastReport的report与PreviewControl建立绑定关系
场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- Maven 生命周期的阶段与插件的目标之间的绑定关系
clean 生命周期 clean 生命周期的阶段 插件的目标 pre-clean clean maven-clean-plugin:clean post-clean default 生命周期的内置插件 ...
- Rest-Assured:发送PATCH请求:更新Hello-imook(java.lang.IllegalArgumentException: Invalid number of path parameters. Expected 2, was 0. Undefined path parameters are: owner, repo.)
代码: /* * 发送PATCH请求:更新Hello-imook */ @Test public void test003_PatchMethod() { S ...
- ANDROID_MARS学习笔记_S02_006_APPWIDGET3_AppWidget发送广播及更新AppWidget
一.简介 二.代码1.xml(1)example_appwidget.xml <?xml version="1.0" encoding="utf-8"?& ...
- Python3发送post请求,自动记住cookie
转载自:http://www.cnblogs.com/meitian/p/4607737.html 在做登录的post请求时,需要记住cookie,否则不能访问登录后的页面. 下面是登录的代码: #c ...
随机推荐
- Nhk R1 Editorial
前言 这场比赛的锅貌似有点多-在准备的时候就已经推迟过三次,在这里为对各位比赛时造成的困扰抱歉.这是出题组第一次放比赛,欢迎批评指正. 主要问题在于 C 的数据造水了,hack 数据造反了于是没有 h ...
- 0 基础晋级 Serverless 高手课 — 初识 Serverless(上)
应用 - 无服务器 2017- 2006 函数即服务 类似 云计算 (Serverless) faas 函数服务 + 后端数据库 账号服务 弹性,按量 服务器,客户端的终结 - 弹性 - 按量 优点 ...
- 14.1 Socket 套接字编程入门
Winsock是Windows操作系统上的套接字API,用于在网络上进行数据通信.套接字通信是一种允许应用程序在计算机网络上进行实时数据交换的技术.通过使用Windows提供的API,应用程序可以创建 ...
- client-go实战之八:更新资源时的冲突错误处理
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<client-go实战> ...
- 手撕Vue-实现事件相关指令
经过上一篇文章的学习,实现了界面驱动数据更新,接下来实现一下其它相关的指令,比如事件相关的指令,v-on 这个指令的使用频率还是很高的,所以我们先来实现这个指令. v-on 的作用是什么,是不是可以给 ...
- 新手面对安卓6.0以上的版本时出现一个关于文件权限检测的问题,报错为:“无法解析符号 'checkSelfPermission'”,解决办法
[[注意]:这只是笔者在遇到这个问题时的解决方法,如果对您毫无帮助,请自寻他法!!!] 面对新手:在简单做一个音乐播放程序时,如果面对安卓6.0以上的版本,就会出现一个关于文件权限检测的问题,报错为: ...
- 数据结构与算法 | 二分搜索(Binary Search)
二分搜索(Binary Search) 文承上篇,搜索算法中除了深度优先搜索(DFS)和广度优先搜索(BFS),二分搜索(Binary Search)也是最基础搜索算法之一. 二分搜索也被称为折半搜索 ...
- QT中级(2)QTableView自定义委托(二)实现QProgressBar委托
同系列文章 QT中级(1)QTableView自定义委托(一)实现QSpinBox.QDoubleSpinBox委托 QT中级(2)QTableView自定义委托(二)实现QProgressBar委托 ...
- 基础练习:FJ的字符串
问题描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = "ABACABA" A4 = "AB ...
- 文心一言 VS 讯飞星火 VS chatgpt (140)-- 算法导论11.4 5题
五.用go语言,考虑一个装载因子为a的开放寻址散列表.找出一个非零的a值,使得一次不成功查找的探查期望数是一次成功查找的探查期望数的 2 倍.这两个探查期望数可以使用定理11.6 和定理 11.8 中 ...