使用python的pythonping库扫描局域网内所有主机的ip地址

时间:2024-11-09 10:34:57

服务器管理员没有把服务器的ip地址固定好,经常变,服务器不在身边,在机房,每次都跑过去查看不是很方便,于是设计了一个程序进行局域网内主机的所有ip进行扫描,然后选出服务器的ip地址,进行登录。没进行代码开发的原因是比较不多见的,实现的功能是偶尔需要的。

代码如下:

# 功能:获取服务器IP地址
# 时间:2023年6月18日
# 作者:whq

from pythonping import ping
from colorama import Fore, Back, Style


def check_online(ip: str):
    # 如果扫描失败可以考虑增大timeout的值
    message = ping(ip, timeout=0.005)
    # print(message)
    success_ping = "Reply"
    if success_ping in str(message):
        print( +  + f"localhost to - {ip} Success.")
        return True
    else:
        print( +  + f"localhost to - {ip} Fail.")
        return False


if __name__ == '__main__':

    # check_online("111.112.113.114")
    available_ip_addrs = []
    ip_prefix = '10.20.74.'
    for ip_idx in range(20, 255, 1):
        ip_addr = ip_prefix + str(ip_idx)
        print('ip_idx:', ip_idx, ip_addr)
        result = check_online(ip_addr)
        if True == result:
            available_ip_addrs.append(ip_addr)

    print(Style.RESET_ALL)
    print('*'*30, 'available_ip_addrs', '*'*30)
    print(available_ip_addrs)

python ssh 登录代码:

# 功能:获取服务器IP地址
# 时间:2023年6月18日
# 作者:user

from pythonping import ping
from colorama import Fore, Back, Style
import paramiko


def check_online(ip: str):
    # 如果扫描失败可以考虑增大timeout的值
    message = ping(ip, timeout=0.005)
    # print(message)
    success_ping = "Reply"
    if success_ping in str(message):
        print( +  + f"localhost to - {ip} Success.")
        return True
    else:
        print( +  + f"localhost to - {ip} Fail.")
        return False


if __name__ == '__main__':

    # check_online("111.112.113.114")
    available_ip_addrs = []
    ip_prefix = '10.20.74.'
    for ip_idx in range(20, 255, 1):
        ip_addr = ip_prefix + str(ip_idx)
        print('ip_idx:', ip_idx, ip_addr)
        result = check_online(ip_addr)
        if True == result:
            available_ip_addrs.append(ip_addr)

    print(Style.RESET_ALL)
    print('*'*30, 'available_ip_addrs', '*'*30)
    print(available_ip_addrs)

    server_ip_addr = None
    # ssh 登录测试
    for idx in range(len(available_ip_addrs)):
        print('ssh连接:', available_ip_addrs[idx])
        try:
            ssh = ()
            ssh.set_missing_host_key_policy(())
            aa = (available_ip_addrs[idx], 22, 'user', 'passwd', timeout=1)
            stdin, stdout, stderr = ssh.exec_command('ls -l')
            print(().decode())
            ()
            server_ip_addr = available_ip_addrs[idx]
            break
        except:
            print('except')
        finally:
            print('finished')

    print('*'*30, '服务器IP地址', '*'*30)
    print('服务器IP为:', available_ip_addrs[idx])

参考文献:

1.Python:用pythonping处理ping_python ping模块_玩转测试开发的博客-****博客