一、适用场景

1.1 通过ping测试前三位相同IP主机的联通性

二、实验准备

2.1 需要下载Python的第三方模块

2.1.1 Windows系统

2.1.1.1 同时按'window键'和'R'键并输入'cmd'进入命令行视图

2.1.1.2 执行命令'pip install pythonping'下载第三方模块pythonping

2.1.2 Linux系统

2.1.2.1 执行命令'pip3.8 install pythonping'下载第三方模块pythonping

三、万能脚本(多线程)

#coding = utf-8

#通过import语句引入os、ping、threading、time、IPy模块

import IPy

import os

from pythonping import ping

import threading

import time

#调用os模块中的方法os.path.exists()来判断名为reachable_ip.txt的文件是否存在

if os.path.exists('reachable_ip.txt'):

#若存在则调用os模块中的方法os.remove()删除

    os.remove('reachable_ip.txt')

#提示用户输入IP的前24位

top_three_ip = input("Please input the ip's top three ip! ")

#创建函数say_after(ip),并赋予一个形参'ip'

def say_after(ip):

#将ping完地址的结果赋值给变量ping_result

    ping_result=ping(ip)

#以附加的模式打开名为reachable_ip.txt的文件

    f=open('reachable_ip.txt', 'a')

#如果ping完地址的结果包含字符串'Reply'则打印提示目的可达信息并把ping的地址记录下来

    if 'Reply' in str(ping_result):

        print(f"{ip} is reachable.")

        f.write(ip + "\n")

#如果ping完地址的结果不包含字符串'Reply'则打印提示目的不可达信息

    else:

        print(f"{ip} is unreachable.")

#打印开始信息包含时间

print(f"程序于{time.strftime('%X')}开始执行\n")

#创建一个空列表,用于添加线程

threads = []

#调用range()函数创建一个整个网段所有地址的列表

last_octet = range(1,255)

#将列表中元素一一赋值给变量ip4

for ip4 in range(1,255):

#每次创建一个完整地址

    ip = top_three_ip + str(ip4)

#调用threading模块中的Thread函数为say_after(ip)函数创建一个线程并将它赋值给变量t,这里Thread函数的target参数对应的是函数名称,args对应的是say_after(ip)函数的参数

    t = threading.Thread(target=say_after,args=(ip))

#将线程一一添加到名为threads的列表中

    threads.append(t)

#调用threading模块中的start()启动刚刚创建的线程

    t.start()

#使用for循环语句一一提取线程

for thread in threads:

#调用threading模块中的join()强制阻塞调用它的线程,直到该线程运行结束或终止

    thread.join()

#定义名为list1的新列表

list1 = []

#以只读的形式打开名为'reachable_ip.txt'的文本文件

f = open('reachable_ip.txt','r')

#使用for循环语句读取文本文件中每一行的内容,进行空白行处理并将其添加到列表末尾

for line in f.readlines():

    lines = line.strip()

    list1.append(lines)

#对列表中的元素处理并利用sorted()函数进行排序处理

new_list1=sorted(list1,key=lambda x:IPy.IP(x).int())

#关闭名为'reachable_ip.txt'的文本文件

f.close()

#打开名为'reachable_ip.txt'的文本文件并取别名为X,将处理后列表元素一行一行写入该文件中,不用文件时自动关闭

with  open('reachable_ip.txt','w') as X:

    for i in new_list1:

        X.write(i + "\n")

#打印程序结束信息包含结束时间

print(f"\n程序于{time.strftime('%X')}执行结束。")

四、不同操作系统执行脚本

4.1 Windows系统

4.1.1 IDLE环境执行脚本

图一

图二

4.1.1.1 执行成功后会在当前目录生成一个reachable_ip的文本文件

4.1.2 cmd环境执行脚本

4.1.2.1 同时按'window键'和'R'键并输入'cmd'进入命令行视图

4.1.2.2 执行命令'cd C:\Users\zq\Desktop'进入脚本所在文件夹

4.1.2.3 执行命令'python pythonping3.py'

4.1.2.4 执行成功后会在当前目录生成一个reachable_ip的文本文件

4.2 Linux系统

4.2.1 创建名为pythonping3.py的脚本文件

图三

4.2.2 在脚本所在目录下执行命令'python3.8 pythonping3.py'

图四

4.2.2.1 执行成功后会在当前目录生成一个reachable_ip的文本文件