2011-01-27 71 views
9

Tôi có một chuỗi đại diện cho một tên miền. Làm thế nào tôi có thể nhận được địa chỉ IP tương ứng bằng cách sử dụng Python 3.x? Một cái gì đó như thế này:Làm cách nào để nhận địa chỉ IP của trang web bằng Python 3.x?

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

có thể trùng lặp với [Cách giải quyết DNS bằng Python?] (Http://stackoverflow.com/questions/3837744/how-to-resolve-dns-in-python) –

Trả lời

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' 

Lưu ý rằng:

  • GetHostByName() không làm việc với IPv6.
  • gethostbyname() sử dụng cuộc gọi C gethostbanme(), không được dùng nữa.

Nếu đây là vấn đề, hãy sử dụng socket.getaddrinfo() để thay thế.

6

Cách dễ nhất là sử dụng socket.gethostbyname(). Tuy nhiên, điều này không hỗ trợ IPv6 và dựa trên cuộc gọi C không được chấp nhận gethostbanme(). Nếu bạn quan tâm đến những vấn đề này, bạn có thể sử dụng linh hoạt hơn socket.getaddrinfo() để thay thế.

Các vấn đề liên quan