我查了一下SO,发现this answer
提供的解决方案是一个很好的起点。根据上述要求,可以修改解决方案以适应上述用例。
如果你在windows的控制台中使用nslookup google.com,你会发现类似的输出:
Non-authoritative answer:
Server: UnKnown
Address: 192.168.0.1
Name: facebook.com
Addresses: 2a03:2880:f12f:183:face:b00c:0:25de
31.13.79.35
在referenced solution之后,这两行是我们解决方案的核心:
process = subprocess.Popen(["nslookup", url], stdout=subprocess.PIPE)
output = str(process.communicate()[0]).split('\\r\\n')
如果您在控制台中打印输出,您将得到与此类似的结果:
["b'Server: UnKnown", 'Address: 192.168.0.1', '', 'Name: facebook.com', 'Addresses: 2a03:2880:f12f:183:face:b00c:0:25de', '\\t 31.13.79.35', '', "'"]
此列表足以满足上述用例。
接下来要做的是找到一种可靠的方法来始终获取6th element,即"\\t 31.13.79.35"
为了让事情更简单,我使用索引切片来获取6th element,使用output[5]。
我已经使用不同的 url 对该代码进行了大约 10-15 次测试,并且得到了类似的结果。更好的方法是通过迭代输出中的列表项以某种方式检测地址。
同样对于上述用例,使用output[5] 效果很好。如果有人可以提供更可靠的方法来检测列表中的 ip 地址,请这样做。
get_ip_address.py
import subprocess
def get_ip_address(url):
process = subprocess.Popen(
["nslookup", url], stdout=subprocess.PIPE)
output = str(process.communicate()[0]).split('\\r\\n')
address = output[5].replace('\\t ', '')
return address
print(get_ip_address('google.com'))