2011-01-27 10 views
9

Mam ciąg reprezentujący nazwę domeny. Jak mogę uzyskać odpowiedni adres IP za pomocą Pythona 3.x? Coś takiego:Jak uzyskać adres IP witryny za pomocą języka Python 3.x?

>>> get_ip('http://www.stackoverflow.com') 
'64.34.119.12' 
+2

możliwy duplikat [Jak rozwiązać DNS w Pythonie?] (Http://stackoverflow.com/questions/3837744/how-to-resolve-dns-in-python) –

Odpowiedz

7
>>> import socket 

>>> def get_ips_for_host(host): 
     try: 
      ips = socket.gethostbyname_ex(host) 
     except socket.gaierror: 
      ips=[] 
     return ips 

>>> ips = get_ips_for_host('www.google.com') 
>>> print(repr(ips)) 
('www.l.google.com', [], ['74.125.77.104', '74.125.77.147', '74.125.77.99']) 
10
Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on win32 
>>> import socket 
>>> socket.gethostbyname('cool-rr.com') 
'174.120.139.162' 

zauważyć, że:

  • gethostbyname() nie działa z IPv6.
  • gethostbyname() używa wywołania C gethostbanme(), które jest przestarzałe.

Jeśli są one problematyczne, należy użyć metody socket.getaddrinfo().

6

Najprostszym sposobem jest użycie socket.gethostbyname(). Nie obsługuje to jednak protokołu IPv6 i jest oparte na wycofanym wywołaniu C gethostbanme(). Jeśli zależy Ci na tych problemach, możesz zamiast tego użyć bardziej uniwersalnego socket.getaddrinfo().