操作系统 :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

数据包打开效果:

运行效果视频可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2024010101 获取。

二、使用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个包。

抓包效果如下:

运行效果视频可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2024010102 获取。

三、使用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()

抓包结果示例:

运行效果视频可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2024010103 获取。

2) send_arp库

在GitHub上找到的一个库,是用python2写的,地址:

https://github.com/krig/send_arp.py

可以改造成兼容python3的版本,示例如下(py3ArpTest1.py):

完整代码可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240101 获取。

测试脚本如下(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可参考如下文章:

抓包效果如下:

运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024010104 获取。

四、资源下载

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

关注微信公众号(聊聊博文,文末可扫码)后回复 20240101 获取。

python3发送Gratuitous ARP更新vip绑定关系的更多相关文章

  1. ARP协议具体解释之Gratuitous ARP(免费ARP)

    ARP协议具体解释之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP.无故ARP.Gratuitous ARP不同于 ...

  2. ARP协议详解之Gratuitous ARP(免费ARP)

    ARP协议详解之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP,无故ARP.Gratuitous ARP不同于一般 ...

  3. ARP协议抓包之帧长度和Gratuitous ARP的问题

    用Winpcap编程构造ARP包选择网卡并发出,遇到若干问题,学到了许多新知识,但是有的还尚未解决,在这里记录下没解决的和解决的问题. 先来看下ARP协议的格式,ARP字段有28个字节,发到以太网中还 ...

  4. ARP、Proxy ARP、Gratuitous ARP

    Proxy ARP 什么是Proxy ARP? 一个主机A(通常是路由器)有意应答另一个主机B的ARP请求(ARP requests).主机A通过伪装其身份,承担起将分组路由到真实目的地的责任.代理A ...

  5. python3对比python2的更新点

    python3对比python2的更新点: Python2官方基础模块:urllib2 第三方功能包:requests python3中urllib库和urilib2库合并成了urllib库. 其中u ...

  6. Winform将FastReport的report与PreviewControl建立绑定关系

    场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  7. Maven 生命周期的阶段与插件的目标之间的绑定关系

    clean 生命周期 clean 生命周期的阶段 插件的目标 pre-clean clean maven-clean-plugin:clean post-clean default 生命周期的内置插件 ...

  8. 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 ...

  9. ANDROID_MARS学习笔记_S02_006_APPWIDGET3_AppWidget发送广播及更新AppWidget

    一.简介 二.代码1.xml(1)example_appwidget.xml <?xml version="1.0" encoding="utf-8"?& ...

  10. Python3发送post请求,自动记住cookie

    转载自:http://www.cnblogs.com/meitian/p/4607737.html 在做登录的post请求时,需要记住cookie,否则不能访问登录后的页面. 下面是登录的代码: #c ...

随机推荐

  1. padans 常用的统计方法

    #coding=utf-8import pandas as pdimport numpy as npfile="./IMDB-Movie-Data.csv"data=pd.read ...

  2. 在阿里云和腾讯云的轻量应用服务器上搭建Hadoop集群

    引入 本文在两台2核2g的云服务器上搭建了Hadoop集群,两台云服务器分别是阿里云(hjm)和腾讯云(gyt),集群部署规划如下: hjm gyt HDFS NameNode\SecondaryNa ...

  3. Ds100p -「数据结构百题」61~70

    61.P5355 [Ynoi2017]由乃的玉米田 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美. 这排玉米一共有 \(N\) 株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出 ...

  4. Solution -「CF 724F」Uniformly Branched Trees

    Description Link. 给定三个数 \(n,d,mod\),求有多少种 \(n\) 个点的不同构的树满足:除了度数为 \(1\) 的结点外,其余结点的度数均为 \(d\).答案对质数 \( ...

  5. MySQL系列之——MySQL介绍和安装、MySQL简介及产品线、安装方式(源码安装 rpm方式 yum方式 通用二进制安装)

    文章目录 一 MySQL介绍和安装 1.1 什么是数据? 1.2 什么是数据库管理系统(DBMS)? 1.3 数据库管理系统种类 二 MySQL简介及产品线 2.1 MySQL行业主流版本 2.2 企 ...

  6. Oracle中的substr()函数和INSTR()函数和mysql中substring_index函数字符截取函数用法:计算BOM系数用量拼接字符串*计算值方法

    最近一直在研究计算产品BOM的成本系数,将拼接的元件用量拼接后拆分计算是个问题,后来受到大佬在mysql中截取字符串的启发在oracle中以substr和instr实现了  1.以下是我在mysql中 ...

  7. 关于 iPhone 上的相机功能

    关于 iPhone 上的相机功能 了解 iPhone 上的摄影风格.快录功能.超广角摄像头和其他相机功能.   通过摄影风格功能锁定您的风格 借助 iPhone 13 各款机型和 iPhone SE( ...

  8. 【Unity3D】水面特效

    1 前言 ​ 水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节.Shader Graph 基础知识详见→Shader Graph简 ...

  9. js数据结构--树

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  10. Java服务总在半夜挂,背后的真相竟然是...

    写在前面 最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了 问题排查 问题复现 为了复现该问题,写 ...