如何在Python脚本中执行ipset add添加IP至已有ipset列表
在Python中向ipset列表添加IP段的实现方法
由于netaddr模块的IPSet仅为Python内部数据结构,无法与系统的ipset工具交互,你可以通过以下两种方式实现向已创建的mylist列表添加IP段的操作:
方法一:直接调用系统ipset命令(推荐)
使用Python的subprocess模块直接执行手动操作时的命令,这是最直接且无需额外依赖的方式:
import subprocess def add_ip_to_set(set_name, cidr_block): try: # 执行ipset添加命令,check=True会在命令执行失败时抛出异常 subprocess.run( ['ipset', 'add', set_name, cidr_block], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) print(f"✅ {cidr_block} 已成功添加到 {set_name}") except subprocess.CalledProcessError as err: print(f"❌ 添加失败: {err.stderr.strip()}") # 调用示例 add_ip_to_set('mylist', '45.254.246.0/24')
注意事项:
- 脚本必须以root权限运行(
sudo python3 your_script.py),否则会因权限不足执行失败 check=True参数确保命令执行出错时主动抛出异常,便于你捕获并处理错误- 重定向
stdout和stderr是为了避免命令输出干扰脚本的正常打印,可根据需求调整
方法二:使用第三方python-ipset库
如果不想直接调用系统命令,可以使用封装了ipset操作的第三方库:
- 先安装库:
pip install python-ipset
- 编写代码:
from ipset import IPSet def add_to_ipset(set_name, cidr_block): try: ipset = IPSet() ipset.add(set_name, cidr_block) print(f"✅ {cidr_block} 已成功添加到 {set_name}") except Exception as err: print(f"❌ 添加失败: {str(err)}") # 调用示例 add_to_ipset('mylist', '45.254.246.0/24')
注意事项:
- 同样需要root权限运行脚本
- 该库底层仍调用系统
ipset命令,但提供了更贴合Python风格的API
内容的提问来源于stack exchange,提问作者Martin Vegter
相关产品推荐
相关产品推荐

