Python 在子网中创建IP的.txt列表

Python 在子网中创建IP的.txt列表,python,Python,我想制作一个非常简单的文本(.txt)文件。这个python程序需要在一个子网中列出多个IP范围,每个IP占用一行 例如: 10.10.27.1 10.10.27.5 10.10.27.6 10.10.27.26 10.10.27.27 10.10.27.28 10.10.27.29 10.10.27.51 10.10.27.52 10.10.27.53 10.10.27.54 子网掩码基本上总是a/24,因此不需要提供掩码输入。该程序甚至可以默认为只支持标准C类 另外,我想为我们使用的设备支

我想制作一个非常简单的文本(.txt)文件。这个python程序需要在一个子网中列出多个IP范围,每个IP占用一行

例如:

10.10.27.1
10.10.27.5
10.10.27.6
10.10.27.26
10.10.27.27
10.10.27.28
10.10.27.29
10.10.27.51
10.10.27.52
10.10.27.53
10.10.27.54
子网掩码基本上总是a/24,因此不需要提供掩码输入。该程序甚至可以默认为只支持标准C类

另外,我想为我们使用的设备支持通用范围。提示说“打印机?”将包括.26-.30。“服务器?”将包括.5-.7。“DHCP?”提示将始终包括子网的.51-.100。“异常?”将包括.100-.254

Subnet?  10.10.27.1
Servers?  Y
Printers?  Y
DHCP?  Y
Abnormal?  N
输出为:

10.10.27.1
10.10.27.5
10.10.27.6
10.10.27.7
10.10.27.26
10.10.27.27
10.10.27.28
10.10.27.29
10.10.27.30
10.10.27.51 (all the way to .100)

编写此代码的最佳方法是什么?

我希望脚本保持简单,只需根据需要输出所有地址:)


看起来有几个
for
循环是您所需要的:

network = '10.10.27'

for host in xrange(100, 255):
   print("{network}.{host}".format(**locals()))

这是我拼凑的一个小脚本

import socket
import sys


ranges = {'servers':(5, 8), 'printers':(26, 31), 'dhcp':(51, 101), 'abnormal':(101, 256)}

subnet = raw_input("Subnet? ")

try:
    socket.inet_aton(subnet)
except socket.error:
    print "Not a valid subnet"
    sys.exit(1)

ip_parts = subnet.split(".")
if len(ip_parts) < 3:
    print "Need at least three octets"
    sys.exit(1)
ip_parts = ip_parts[:3]
ip = ".".join(ip_parts)

include_groups = []
last_octets = []

servers = raw_input("Servers? ")
printers = raw_input("Printers? ")
dhcp = raw_input("DHCP? ")
abnormal = raw_input("Abnormal? ")

if servers == "Y":
    include_groups.append('servers')
if printers == "Y":
    include_groups.append('printers')
if dhcp == "Y":
    include_groups.append('dhcp')
if abnormal == "Y":
    include_groups.append('abnormal')

for group in include_groups:
    last_octets.extend([x for x in xrange(ranges[group][0], ranges[group][1])])

print "%s.1" %(ip)
for octet in last_octets:
    print "%s.%s" %(ip, octet)
导入套接字
导入系统
范围={'servers':(5,8),'printers':(26,31),'dhcp':(51101),'normal':(101256)}
子网=原始输入(“子网”)
尝试:
socket.inet_aton(子网)
除socket.error外:
打印“不是有效的子网”
系统出口(1)
ip_parts=子网拆分(“.”)
如果透镜(ip_零件)<3:
打印“至少需要三个八位字节”
系统出口(1)
ip_零件=ip_零件[:3]
ip=“.”。连接(ip_零件)
包含组=[]
最后的八位字节=[]
服务器=原始输入(“服务器?”)
打印机=原始输入(“打印机?”)
dhcp=原始输入(“dhcp?”)
异常=原始输入(“异常”)
如果服务器==“Y”:
include_groups.append('服务器')
如果打印机==“Y”:
include_groups.append('printers'))
如果dhcp==“Y”:
include_groups.append('dhcp')
如果异常==“Y”:
include_groups.append('normal')
对于包含组中的组:
最后的八位字节。扩展([x代表x范围中的x(范围[group][0],范围[group][1]))
打印“%s.1%”(ip)
对于最后的八位字节中的八位字节:
打印“%s.%s%”(ip,八位字节)

10.10.27.7和
*.30
是如何进入输出的?另外,输入和输出之间有什么区别呢?我认为使用nmap编写一个简单的shell脚本要好得多。这只是生成一个值列表吗?你尝试过什么
循环?.5、.6和.7到达那里是因为用户对服务器说“Y”。我认为OP的意思是,一旦输入了“子网”,之后就假定为C类。所以10.10.27是前缀。现在对服务器说“Y”意味着将使用10.10.27.5到.7。等等,就像格雷格说的,谢谢你。使用nmap的简单shell脚本?我熟悉nmap,并且经常使用它。此文本文件的目的是帮助动态创建IP列表,以便Windows上的持续ping程序读取。否则,我会利用它。@S.lott-是,按说明生成此列表。我还没有尝试过任何东西,我想先得到一些建议。我不熟悉从头开始编写代码,但不熟悉修改代码。我想从一开始就更好地理解如何做到最好。谢谢,我希望我可以申请原始信用,但我第一次看到它是在其他地方。当然比制作自己的dict要好(尽管我从来没有做过速度测试来比较),谢谢大家!我将尝试这两种方法,看看哪一种效果最好。我会在我认为合适的时候进行组合/修改,然后发回。你帮了大忙。
import socket
import sys


ranges = {'servers':(5, 8), 'printers':(26, 31), 'dhcp':(51, 101), 'abnormal':(101, 256)}

subnet = raw_input("Subnet? ")

try:
    socket.inet_aton(subnet)
except socket.error:
    print "Not a valid subnet"
    sys.exit(1)

ip_parts = subnet.split(".")
if len(ip_parts) < 3:
    print "Need at least three octets"
    sys.exit(1)
ip_parts = ip_parts[:3]
ip = ".".join(ip_parts)

include_groups = []
last_octets = []

servers = raw_input("Servers? ")
printers = raw_input("Printers? ")
dhcp = raw_input("DHCP? ")
abnormal = raw_input("Abnormal? ")

if servers == "Y":
    include_groups.append('servers')
if printers == "Y":
    include_groups.append('printers')
if dhcp == "Y":
    include_groups.append('dhcp')
if abnormal == "Y":
    include_groups.append('abnormal')

for group in include_groups:
    last_octets.extend([x for x in xrange(ranges[group][0], ranges[group][1])])

print "%s.1" %(ip)
for octet in last_octets:
    print "%s.%s" %(ip, octet)