[英]Python help to take in a range of IP addresses from a text file and then output each ip address in the range
到目前为止,该程序将所有文本文件放入目录中,然后将它们输出到具有相同名称但.out的文件中。 如果有一个IP地址1992.168.1.1-192.168.1.7
我希望它将该范围内的所有IP输出到新文件名。
#!/usr/bin/env python
import sys
import re
import os
try:
if file.endswith (".txt"):
f=open(file, 'r')
try:
file = open(f, "r")
ips = []
for text in file.readlines():
regex = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})',text)
if regex is not None and regex not in ips:
ips.append(regex)
for ip in ips:
#name of the file
name = os.path.splitext() [0]
name = name +".out"
outfile = open(name, 'w')
spider = "".join(ip)
if spider is not '':
outfile.write(spider)
outfile.write("\n")
finally:
file.close()
outfile.close()
except IOError, (errno, strerror):
print "I/O Error(%s) : %s" % (errno, strerror)
如果您使用的是Python 3.3+,请使用ipaddress模块:
>>> for addr in IPv4Network('192.0.2.0/28'):
... addr
...
IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
...
IPv4Address('192.0.2.15')
可能最简单的方法是将ip解析为一个整数-如果您想自己滚动一个IP。
def ip_to_int(ipstr):
b = [ int(p) for p in ipstr.split('.') ]
return (b[0] << 24) + (b[1] << 16) + (b[2] << 8) + b[3]
def int_to_ip(i):
octets = []
for n in range(4):
octets.append(i & 0xff)
i >>= 8
return ".".join([ str(octet) for octet in octets[::-1]])
def iprange(ipstring):
ipstart, ipend = ipstring.split('-')
return [ int_to_ip(ipint) for ipint in range(ip_to_int(ipstart), ip_to_int(ipend)+1) ]
这确实不了解有关有效地址(网络地址)的任何信息,也没有任何错误检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.