读取带有网络和子网掩码的 csv 并写入带有 ping 结果的文件

Posted

技术标签:

【中文标题】读取带有网络和子网掩码的 csv 并写入带有 ping 结果的文件【英文标题】:Read csv with network and subnetmask and write a file with ping results 【发布时间】:2021-10-20 16:05:34 【问题描述】:

我正在尝试创建一个 python 脚本,该脚本将从具有这种格式的 files.csv 文件中读取:

10.0.20.0,255.255.255.0
192.168.10.0,255.255.252.0

它将计算子网并循环和 ping 该子网上的所有 ip 地址并写入文件,例如 10.0.20.0.txt 和 ping 结果(可达或不可达)。我在使用子网计算器以及如何循环和 ping 最后一个八位字节时遇到问题:10.0.20.1、10.0.20.2、10.0.20.3 等...

【问题讨论】:

我没有downvote your question because no attempt was made,因为您是新贡献者,但通常我们希望您至少创建一个honest attempt at the solution,然后然后提出具体问题( s) 关于你的实施。 我们很乐意为您提供帮助,但我们不是代码编写服务,也不是基本教程和文档的替代品。向我们展示您的代码,具体说明您遇到的困难,我们可能会为您提供帮助。 正如@larsks 所建议的,在提出问题之前,您必须先尝试一下。下面的代码是做你想做的事情的好起点: 【参考方案1】:

正如@martineau 和@larsks 所建议的,在提问之前您必须先尝试一下。下面的代码是做你想做的事情的好起点:

import ipaddress

address = '10.0.20.0'
netmask = '255.255.255.0'

ipv4 = ipaddress.IPv4Network(f'address/netmask')

for ip in list(ipv4)[1:-1]:
    print(ip)

然后安装icmplib并使用ping功能(pip install icmplib)。要将数据保存到 csv,请使用模块 csv

【讨论】:

我更新了我的答案给你更多的帮助。 如何使用ping功能?我正在导入操作系统并使用常规 ping 命令行,但我希望它可以移植到任何操作系统【参考方案2】:

所以我正在尝试这个但我得到了错误 我正在阅读的文件具有这种格式 10.0.10.10,255.255.255.0

导入操作系统 导入系统 重新进口 导入IP地址

使用 open(sys.argv[1], "r") 作为数据文件: 对于 data_file 中的行: 数据 = line.split(",") ipv4 = ipaddress.IPv4Network(f'data[0]/data[1]') 对于列表中的 ip(ipv4)[1:-1]: 打印(IP)

文件“ip-add.py”,第 23 行,在 ipv4 = ipaddress.IPv4Network(f'data[0]/data[1]') init 中的文件“/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/ipaddress.py”,第 1450 行 self.netmask, self._prefixlen = self._make_netmask(mask) _make_netmask 中的文件“/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/ipaddress.py”,第 1120 行 prefixlen = cls._prefix_from_ip_string(arg) _prefix_from_ip_string 中的文件“/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/ipaddress.py”,第 518 行 cls._report_invalid_netmask(ip_str) _report_invalid_netmask 中的文件“/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/ipaddress.py”,第 474 行

ipaddress.NetmaskValueError: '255.255.255.0\n' 不是有效的网络掩码

【讨论】:

以上是关于读取带有网络和子网掩码的 csv 并写入带有 ping 结果的文件的主要内容,如果未能解决你的问题,请参考以下文章

子网掩码及子网划分

#19 子网掩码的由来,与几种常见的网络协议

子网掩码是啥?

计算机网络IP地址和子网掩码的关系

子网掩码的划分

ABC三类网络子网数目与子网掩码的转换表