IP Scaner
09.01.2024
# IP Lib
# https://realpython.com/python-ipaddress-module/

# Ping IP  working any OS , BUT with echo
# https://stackoverflow.com/questions/2953462/pinging-servers-in-python

# VPN
# https://techcrunch.com/2017/04/09/how-i-made-my-own-vpn-server-in-15-minutes/
# https://habr.com/ru/post/170895/
# Видеоуроки
# https://www.youtube.com/playlist?list=PL4p9O5LPYFNvI9LqzS8QKgoeu98QOMTWu
# https://www.youtube.com/watch?v=e6l02YjMcbw
# https://www.youtube.com/watch?v=9lIQMGsD92A
# https://www.kaspersky.ru/blog/vpn-hardships/11622/

# Роутеры
# https://catalog.onliner.by/compare/kn1010+kn1810+kn1910
# https://forum.onliner.by/viewtopic.php?t=22544058

# Файлы загрузки для Keenetic Viva (KN-1910) 
# https://help.keenetic.com/hc/ru/articles/360001759419-%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8-%D0%B4%D0%BB%D1%8F-Keenetic-Viva-KN-1910-
# Keenetic Viva VPN-сервер L2TP/IPsec
# https://help.keenetic.com/hc/ru/articles/360000684919-VPN-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80-L2TP-IPsec

# https://www.youtube.com/watch?v=zcCD3135vG4

import  socket
import  ipaddress
import  ping3   # https://github.com/kyan001/ping3
from    getmac      import get_mac_address
from    colorama    import Fore, Back, Style

class Local_Network_List():
    def __init__(self,NAME,IP,MAC):
        self.Comp_NAME   = NAME
        self.Comp_IP     = IP
        self.Comp_MAC    = MAC


This_Comp_IP_List = []

ThisComp_NAME = socket.gethostname()
ThisComp_IP = socket.gethostbyname( ThisComp_NAME )

ThisComp_MAC = get_mac_address( ip = ThisComp_IP )

print ( Fore.GREEN + " Name " + ThisComp_NAME + Fore.WHITE + "\n IP " + ThisComp_IP + Fore.BLUE + "\n MAC " + ThisComp_MAC )

TempStr = ThisComp_IP.split( "." )
TempStr[3] = 0

TempStr1 = ""

for i in TempStr:
 TempStr1 += ''.join( str(i) )
 if TempStr.index(i) < 3:
  TempStr1 += "."

Start_IP = ipaddress.IPv4Address( TempStr1 ) 

Start_IP += 0

End_IP = Start_IP + 10

TempStr = TempStr1 + "/24"

net = ipaddress.IPv4Network( TempStr )

Pointer = 0

for Addr in range ( int(ipaddress.IPv4Address(Start_IP) ) , int( ipaddress.IPv4Address( End_IP ) ) ):  #net:
        ADrStr = str(ipaddress.IPv4Address(Addr))
        status = ping3.ping( ADrStr )
        if status != None:
            ThisComp_MAC = get_mac_address( ip = ADrStr )
            try:
                ThisComp_NAME = socket.gethostbyaddr( ADrStr )
            except:
                ThisComp_NAME = ["___"]
            This_Comp_IP_List.append ( Local_Network_List( ThisComp_NAME[0], ADrStr, ThisComp_MAC ))
        else:
            print(" NO IP ")

for x in This_Comp_IP_List:
    print ( Fore.GREEN + " Name " + x.Comp_NAME + Fore.WHITE + " IP " + x.Comp_IP + Fore.BLUE + " MAC " + x.Comp_MAC )