簡體   English   中英

Python幫助從文本文件中獲取IP地址范圍,然后輸出該范圍內的每個IP地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM