Форум сайта python.su
Появляется ошибка. Как исправить? Нужно, чтобы результат был следующим:
Доменное имя для ('10.62.39.1', ‘10.62.39.2’, ‘10.62.39.3’, ‘10.62.39.4’, ‘10.62.39.5’) как ('WS0620390605', ‘WS0620391315’, ‘WS06939354’, ‘WS0650351315’, ‘WS0625481595’)
WS………… - это доменные имена компьютеров, которые должны браться с помощью gethostbyaddr
Ошибка:
hostname = socket.gethostbyaddr(tuple(iplist)) ^^^^^^^^^^^^^^^^^^^^^^ TypeError: gethostbyaddr() argument 1 must be str, bytes or bytearray, not tuple
import socket from PyQt6 import QtCore, QtGui, QtWidgets import ipaddress # проверка на валидацию IP адресов def ip_checkv4(self): ip1 = "10.62.39.1" ip2 = "10.62.39.5" if(ip1 == "" and ip2 == ""): print("Начальный и конечный IP-адреса должны быть введены.") elif(ipaddress.ip_address(ip1) and ipaddress.ip_address(ip2)): ipaddress1 = ip1.split(".") # ['10', '62', '39', '1'] ipaddress2 = ip2.split(".") #['10', '62', '39', '5'] if(ipaddress1[:3] == ipaddress2[:3]): # проверка на совпадение первых трех октетов ['10', '62', '39']['10', '62', '39'] if(ipaddress1[3] < ipaddress2[3]): # если четвертый октет меньше, то выводим диапазон # hostname = socket.gethostbyaddr(ip1)[0] iplist = [] ipcur = ipaddress.ip_address(ip1) while ipcur <= ipaddress.ip_address(ip2): iplist.append(str(ipcur)) ipcur += 1 hostname = socket.gethostbyaddr(ipcur) print(f"Доменное имя для {iplist} как {hostname}") else: print("Четвертый октет первого IP адреса должен быть меньше четвертого октета второго IP адреса.") else: print("Первые три октета IP-адресов не совпадают.") else: print("Некорректно введены IP адреса.")
Отредактировано atm87 (Июнь 24, 2024 13:22:12)
Офлайн
import ipaddress import socket def make_ip_range(start, end): out = [] ipcur = ipaddress.ip_address(start) while ipcur <= ipaddress.ip_address(end): out.append(str(ipcur)) ipcur += 1 return out def get_domain_name(ip): try: out = socket.gethostbyaddr(ip)[0] except socket.herror: out = None return out def f(): ipstart = '10.62.39.1' ipend = '10.62.39.12' iplist = make_ip_range(ipstart, ipend) namelist = list(map(get_domain_name, iplist)) print(iplist) print(namelist) f()
>>> import ipaddress >>> import socket >>> >>> def make_ip_range(start, end): ... out = [] ... ipcur = ipaddress.ip_address(start) ... while ipcur <= ipaddress.ip_address(end): ... out.append(str(ipcur)) ... ipcur += 1 ... return out ... >>> def get_domain_name(ip): ... try: ... out = 'name for ' + str(ip)#socket.gethostbyaddr(ip)[0] ... except socket.herror: ... out = None ... return out ... >>> def f(): ... ipstart = '10.62.39.1' ... ipend = '10.62.39.12' ... iplist = make_ip_range(ipstart, ipend) ... namelist = list(map(get_domain_name, iplist)) ... print(iplist) ... print(namelist) ... >>> f() ['10.62.39.1', '10.62.39.2', '10.62.39.3', '10.62.39.4', '10.62.39.5', '10.62.39.6', '10.62.39.7', '10.62.39.8', '10.62.39.9', '10.62.39.10', '10.62.39.11', '10.62.39.12'] ['name for 10.62.39.1', 'name for 10.62.39.2', 'name for 10.62.39.3', 'name for 10.62.39.4', 'name for 10.62.39.5', 'name for 10.62.39.6', 'name for 10.62.39.7', 'name for 10.62.39.8', 'name for 10.62.39.9', 'name for 10.62.39.10', 'name for 10.62.39.11', 'name for 10.62.39.12'] >>>
Отредактировано py.user.next (Июнь 24, 2024 15:02:13)
Офлайн
Додумался сам, но думаю это как-то не красиво))
iplist = [] hostname = [] ipcur = ipaddress.ip_address(ip1) while ipcur <= ipaddress.ip_address(ip2): iplist.append(str(ipcur)) ipcur += 1 addr = socket.gethostbyaddr(str(ipcur))[0] hostname.append(addr) print(f"Domain names {iplist} as {hostname}")
Отредактировано atm87 (Июнь 24, 2024 15:15:54)
Офлайн
Вот так сейчас выглядит мой код:
def ip_checkv4(self): ip1 = "10.62.39.1" ip2 = "10.62.39.5" if(ip1 == "" and ip2 == ""): print("Начальный и конечный IP-адреса должны быть введены.") elif(ipaddress.ip_address(ip1) and ipaddress.ip_address(ip2)): ipaddress1 = ip1.split(".") ipaddress2 = ip2.split(".") if(ipaddress1[:3] == ipaddress2[:3]): # проверка на совпадение первых трех октетов if(ipaddress1[3] < ipaddress2[3]): # если четвертый октет меньше, то выводим диапазон iplist = [] hostname = [] ipcur = ipaddress.ip_address(ip1) while ipcur <= ipaddress.ip_address(ip2): iplist.append(str(ipcur)) ipcur += 1 addr = socket.gethostbyaddr(str(ipcur))[0] hostname.append(addr) print(f"IP-адресу {iplist} соответствует доменное имя {hostname}") else: print("Четвертый октет первого IP адреса должен быть меньше четвертого октета второго IP адреса.") else: print("Первые три октета IP-адресов не совпадают.") else: print("Некорректно введены IP адреса.")
addr = socket.gethostbyaddr(str(ipcur))[0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ socket.herror: [Errno 11004] host not found
Офлайн
>>> import socket >>> >>> def get_domain_name(ip): ... try: ... out = socket.gethostbyaddr(ip)[0] ... except socket.herror: ... out = None ... return out ... >>> def test_address(address): ... if get_domain_name(address) is not None: ... print(address, 'доступен') ... else: ... print(address, 'недоступен') ... >>> test_address('127.0.0.1') 127.0.0.1 доступен >>> test_address('123.0.0.1') 123.0.0.1 недоступен >>>
Офлайн