python - 为什么 python-iptables 在使用 syslog 模块时会出现问题
问题描述
我遇到了一个奇怪的错误。我已经解决了 2 天,但未能解决它。所以我想在这里发布它,看看是否有人可以帮助解决这个问题。我发现 python-iptables(iptc) 不能与 syslog 模块一起使用。请看下面的代码。test1() 只会发送前 2 条日志消息。test2 和 test3 工作正常。我在 ubuntu16.04 和 20.04、python3.6 和 python3.8 上都对此进行了测试。
import syslog
import iptc # pip install python-iptables
import os
import socket
def log(msg):
syslog.openlog(ident="xxxxxx")
syslog.syslog(syslog.LOG_INFO, msg)
syslog.closelog()
def log2(msg):
sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM|socket.SOCK_CLOEXEC)
sock.connect("/dev/log")
sock.send((" xxxxxx: "+msg).encode("utf-8"))
sock.close()
def add_rule_cmdline():
os.system("iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT")
def add_rule_iptc():
table = iptc.Table(iptc.Table.FILTER)
chain = iptc.Chain(table, "INPUT")
rule1 = {'target': 'ACCEPT','conntrack': {'ctstate': 'RELATED,ESTABLISHED'}}
chain.append_rule(iptc.easy.encode_iptc_rule(rule1))
table.close()
#no test2 received
def test1():
log("test0")
os.system("iptables -F")
log("test1")
add_rule_iptc()
log("test2")
#working
def test2():
log("test0")
os.system("iptables -F")
log("test1")
add_rule_cmdline()
log("test2")
#working
def test3():
log2("test0")
os.system("iptables -F")
log2("test1")
add_rule_iptc()
log2("test2")
解决方案
推荐阅读
- azure - 数组内的 Arm 模板副本
- drupal - 如何在drupal 8的自定义块中获取字段类型列表键值
- javascript - 如何在 Scratch/Blockly 中更改块的形状?
- node.js - 试图了解 web 中的 node.js 包捆绑效率低下
- arrays - 在Angular 9中解析包含名称值对的Json
- c# - 如何从 Byte[] 数组转换为图像?
- python - 模拟 redis 为应用程序编写单元测试
- javascript - 使用 react 和 .NET framework API Controller 在正文中发布文件
- python - Tkinter 以编程方式调整框架大小
- azure - 从应用程序网关指标中筛选出 Azure 前门运行状况探测请求