Python obtiene la dirección IP del host conectable en la red de área local

Use python para obtener la dirección IP del host que se puede conectar en toda la LAN:

Toda la idea es

1. Obtenga primero la dirección IP de mi máquina

2. Después de obtener mi IP local, intercepte el último segmento de la IP y conserve la parte anterior de la información del segmento de red.

3. Invoque el comando cmd, realice un ciclo de 1 a 255 veces a 255 para hacer ping a la ip que se puede hacer ping en todo el segmento de la red

Juzgue si se puede hacer ping haciendo ping TTL mayor que 0

4. Por último, obtenga una dirección IP a la que se pueda hacer ping

# -*- coding: utf-8 -*-

import platform
import os
import time
import threading
import socket

live_ip = 0


def get_os():
    os = platform.system()
    if os == "Windows":
        return "n"
    else:
        return "c"


def ping_ip(ip_str):
    cmd = ["ping", "-{op}".format(op=get_os()),
           "1", ip_str]
    output = os.popen(" ".join(cmd)).readlines()
    for line in output:
        if str(line).upper().find("TTL") >= 0:
            print("ip: %s 在线" % ip_str)
            global live_ip
            live_ip += 1
            break


def find_ip(ip_prefix):
    '''''
    给出当前的ip地址段 ,然后扫描整个段所有地址
    '''
    threads = []
    for i in range(1, 256):
        ip = '%s.%s' % (ip_prefix, i)
        threads.append(threading.Thread(target=ping_ip, args={ip, }))
    for i in threads:
        i.start()
    for i in threads:
        i.join()


def find_local_ip():
    """
    获取本机当前ip地址
    :return: 返回本机ip地址
    """
    myname = socket.getfqdn(socket.gethostname())
    myaddr = socket.gethostbyname(myname)
    return myaddr


if __name__ == "__main__":
    print("开始扫描时间: %s" % time.ctime())
    addr = find_local_ip()
    args = "".join(addr)
    ip_pre = '.'.join(args.split('.')[:-1])
    find_ip(ip_pre)
    print("扫描结束时间 %s" % time.ctime())
    print('本次扫描共检测到本网络存在%s台设备' % live_ip)

resultado de la operación:

开始扫描时间: Sun Apr 26 00:10:28 2020
ip: 192.168.1.11 在线
ip: 192.168.1.6 在线
ip: 192.168.1.2 在线
ip: 192.168.1.3 在线
ip: 192.168.1.1 在线
ip: 192.168.1.4 在线
ip: 192.168.1.100 在线
ip: 192.168.1.255 在线
扫描结束时间 Sun Apr 26 00:10:32 2020
本次扫描共检测到本网络存在8台设备

En este punto, hemos obtenido todas las redes conectables en toda la red de área local.

Supongo que te gusta

Origin blog.csdn.net/u012798683/article/details/105760065
Recomendado
Clasificación