2014-10-28 6 views
0

주어진 호스트 이름과 관련된 모든 IP 주소를 얻을 수있는 코드를 작성하려고합니다.호스트와 관련된 모든 IP 주소 얻기

def getips(hostname): 
    try: 
     result = socket.getaddrinfo(hostname, None, socket.AF_INET,\ 
      socket.SOCK_DGRAM, socket.IPPROTO_IP, socket.AI_CANONNAME) 
     list = [x[4][0] for x in result] 
     return list 
    except Exception, err: 
     print "error" 
    return "" 


ips = getips('bbc.co.uk')             

print ips 

문제는이, 때로는이 예에서 특정 호스트에 연결된 모든 4 개 IP를 반환, 가끔은 그냥 하나를 반환

이것은 내가 지금까지있는 것입니다. 파이썬에서이 작업을 수행 할 수있는 방법이 있나요? 그래서 호스트와 관련된 모든 IP를 일관되게 반환합니까?

+0

, 그것은 지속적으로 실패없이 사 개 결과를 가져옵니다. –

+0

방금 ​​다른 호스트에서 시도해 보았지만 나에게도 적합합니다. 작동하지 않는 것은 Win8 호스트에서 실행되는 Ubuntu VM입니다. – smithy

답변

1

getaddrinfo()은 지정된 호스트의 IP 주소를 찾기 위해 호스트에서 확인자 라이브러리를 호출합니다. 파이썬에는 리졸버가 보여주는 것과는 다른 결과 세트를 가져올 수있는 특별한 마법이 없습니다. 당신이 당신의 파이썬 스크립트에 strace를 실행하면

는 예컨대 들어, 리졸버가 호출되는 것을 알 수 있습니다 : 나를 위해

open("/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3 
+0

감사합니다. 유용한 정보입니다. – smithy