我需要撤消IP地址但不清楚如何使用IPy).reverseNames()

时间:2013-06-07 01:22:05

标签: python

这是脚本。我一直在尝试修改打印行(粗​​体)。

reverseNames()来自IPy模块。我不清楚如何在这个例子中实现。

print addy.reverseNames()%(addy)

#!/usr/bin/env python
import sys
import re

try:
    if sys.argv[1:]:
        print "File: %s" % (sys.argv[1])
        logfile = sys.argv[1]
    else:
        logfile = raw_input("Please enter a log file to parse, e.g /var/log/secure: ")
    try:
        file = open(logfile, "r")
        ips = []
        for text in file.readlines():
           text = text.rstrip()
           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:
           outfile = open("/tmp/blocked_ips_test", "a")
           addy = "".join(ip)
           if addy is not '':
              **print "IP: %s" % (addy)**
              outfile.write(addy)
              outfile.write("\n")
    finally:
        file.close()
        outfile.close()
except IOError, (errno, strerror):
        print "I/O Error(%s) : %s" % (errno, strerror)

3 个答案:

答案 0 :(得分:1)

由于您已将单个八位字节捕获为字符串列表,因此只需反转列表并加入点即可。如果你想要加上.in-addr.arpa.后缀,那应该是微不足道的。

addy = '.'.join(reversed(ip)) + ".in-addr.arpa.'

如果您确实希望使用IPy API,则需要先将字符串表示转换为IPy对象。

import IPy
i = IP('.'.join(ip))
addy = i.reverseNames()

答案 1 :(得分:1)

如果您愿意,可以使用占领图书馆IPY。

import IPy
i = IP('.'.join(ip))
addy = i.reverseNames()

这可以帮助您安装库 https://github.com/autocracy/python-ipy/wiki

相反

addy = ".".join(reversed(ip.split('.'))) +'.in-addr.arpa'

答案 2 :(得分:0)

Python标准库中的ipaddress模块​​也支持IPv6。

from ipaddress import ip_address

print(ip_address("127.0.0.1").reverse_pointer)
print(ip_address("2a03:2880:f10a:83:face:b00c::25de").reverse_pointer)
1.0.0.127.in-addr.arpa
e.d.5.2.0.0.0.0.c.0.0.b.e.c.a.f.3.8.0.0.a.0.1.f.0.8.8.2.3.0.a.2.ip6.arpa