我的朋友们, 使用python 2.7.3 我想在file1.txt手册中写一些ipaddrs,每行一个ip。 如何使用python读取file1.txt所有ipaddress,将其放入file2.txt另存为file3.txt?
FILE1.TXT
1.1.1.1
2.2.2.2
3.3.3.3
...
5.5.5.5
...
10.10.10.10
FILE2.TXT
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
file3.txt
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 1.1.1.1 --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 2.2.2.2 --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 3.3.3.3 --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 4.4.4.4 --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 5.5.5.5 --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 6.6.6.6 --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 7.7.7.7 --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 8.8.8.8 --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 9.9.9.9 --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -s 10.10.10.10 --dport 1080 -j ACCEPT
-A INPUT -p udp -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
答案 0 :(得分:0)
由于你的第二个文件并没有真正改变,似乎根本不需要。一般来说,你有一些"固定"字符串,然后你想添加一些变化的行(至少是IP),然后你将添加一些"固定"字符串,再次。因此,您希望在文件的开头和结尾处输入几行不变的字符串也可以在python代码中编写。
这样做,您最终会得到一个IP列表和一个python脚本。运行脚本将生成您想要的输出 - 所有与Ip /防火墙相关的内容将直接写入脚本代码中,并且可以根据需要在那里进行编辑。
因此,您需要从/向文件和循环读取和写入。它并不难,我想阅读以下网站将帮助您找出所需的内容:
with
语句。做完之后"正常"如上所述,请改用此方法。for
- 循环。利用这些知识,你......
如果这不适合您,请修改您的问题并显示您正在使用的代码。
当然,它可以真正使用两个输入文件来生成输出,但这需要做更多的编码,也许并不是真的需要它。如果您坚持,请尝试我先提到的 - 您可以随时扩展您的脚本。
答案 1 :(得分:0)
您要做的是合并两个文件的内容,将file1.txt
派生的内容插入file2.txt
。我可以从您的示例中看到插入点位于file2.txt
的第7行之后,但是,插入点如何确定为file2.txt
?
如果假设您将始终插入,则可以打开file2.txt
和file3.txt
,从file2.txt
读取7行并将这些行写入file3.txt
。然后,您可以将转换后的IP地址插入file3.txt
。最后,file2.txt
的其余部分将被读取并写入file3.txt
。一些代码就是这样的:
INSERT_AFTER_LINE = 7
template = '-A INPUT -p tcp -m state --state NEW -m tcp -s {ip} --dport 1080 -j ACCEPT\n'
with open('file2.txt') as file2, open('file3.txt', 'w') as file3:
for i in range(INSERT_AFTER_LINE):
file3.write(file2.readline())
with open('file1.txt') as file1:
for line in file1:
file3.write(template.format(ip=line.strip()))
file3.write(file2.read())
如果文件的顺序无关紧要,则此任务将会简化,因为您可以在COMMIT
之前在文件末尾附近添加新规则。但是,我认为顺序对iptables规则很重要。