Я использую socket.gethostbyaddr()
в python3 для преобразования IP в имя хоста.
Мне нужно различать 3 случая:
1) success (IP resolved to hostname)
2) IP address has no DNS record
3) DNS server is temporarily unavailable
Я использую простую функцию:
def host_lookup(addr):
try:
return socket.gethostbyaddr(addr)[0]
except socket.herror:
return None
а затем я хочу вызвать эту функцию из моего основного кода:
res = host_lookup('45.82.153.76')
if "case 1":
print('success')
else if "case 2":
print('IP address has no DNS record')
else if "case 3":
DNS server is temporarily unavailable
else:
print('unknown error')
Когда я пытаюсь socket.gethostbyaddr()
в консоли Python, я получаю разные коды ошибок в каждом случае:
>>> socket.gethostbyaddr('45.82.153.76')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.herror: [Errno 1] Unknown host
и когда я намеренно делаю DNS недоступным:
>>> socket.gethostbyaddr('45.82.153.76')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.herror: [Errno 2] Host name lookup failure
Итак, как я могу различать эти случаи в моем коде выше?