# encoding='utf-8'
"""
https://blog.51cto.com/u_16213398/9007087
https://docs.python.org/zh-cn/3/howto/ipaddress.html#ipaddress-howto
https://blog.csdn.net/u013541325/article/details/117530957
https://www.cnblogs.com/itsfei/p/17445303.html
https://mwell.tech/archives/9630#:~:text=%E4%BD%BF%E7%94%A8%20ipaddress%20%E6%A8%A1%E5%9D%97%E5%A4%84%E7%90%86%20IP%20%E7%BD%91%E7%BB%9C%201%201.%20%E6%A3%80%E6%9F%A5IP%E5%9C%B0%E5%9D%80%E6%98%AFIPv4%E8%BF%98%E6%98%AFIPv6,true%E3%80%82%20...%208%208.%20%E4%BD%BF%E7%94%A8%20IPv4Interface%20%E5%AF%B9%E8%B1%A1%20
"""
import re
import ipaddress
# 保留ipv4地址(正则法)
'''def check_ip(ipAddr):
compile_ip=re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
if compile_ip.match(ipAddr):
return True
else:
return False'''
def is_ipv4(ipAddr):
try:
ipaddress.IPv4Address(ipAddr)
return True
except ipaddress.AddressValueError:
return False
# 去除内网地址(ip):
'''def is_private_ip(ipArrd):
subnet = {
"10.0.0.0/8",
"172.16.0.0/12",
"192.168.0.0/16"
}
ip = ipaddress.ip_address(ipArrd)
try:
for lan in subnet:
if ip in ipaddress.ip_network(lan):
return True
return False
except ipaddress.AddressValueError:
return "error!!!"'''

with open("ip.txt",'r', encoding='utf-8') as f:
ip_list = f.read()
#去除杂七杂八的
parttern1 = re.compile('IOC:|ioc:|XFF:|"|”|XFF代理:')
data = re.sub(parttern1,"",ip_list)
#分割成多行
parttern2=re.compile(',|,|、')
data = re.sub(parttern2,'\n',data) #re.sub返回的是新的列表
#存为列表
ip_list = data.split("\n")
#去除空格
ip_list = [x.strip() for x in ip_list if x.strip() != '']
#去除端口号
final_list = [re.findall(r'\d+\.\d+\.\d+\.\d+', x)[0] if ":" in x else x for x in ip_list]
#保留ipv4地址
final_list = [x for x in final_list if is_ipv4(x) == True]
#去除内网地址
final_list = [x for x in final_list if ipaddress.ip_address(x).is_private == False]
#打印测试
with open("output.txt", 'w',encoding='utf-8') as f:
for i in final_list:
f.write(i + "\n")

dns判断有个反向思考的方法,利用nslookup可以尝试,后续补充

分隔ip

with open('ip.txt', 'r') as f:
data = f.read()
#print(str(data[0:31]))
data = data.replace(" ","")
data = data.split("\n")
#print(data)
#with open('分隔01.txt','w') as f:
# for i in data:
with open('分隔01.txt','w') as f:
for i in range(0,len(data),31):
line = ','.join(map(str,data[i:i+32]))
#print(len(line.split(",")))
#print(line)
f.write(line + "\n")

#print(len(line.split(",")))
#print(line)