Để có được ip bên ngoài của bạn, bạn có thể làm cho một truy vấn dns đến một máy chủ opendns với hostname đặc biệt "myip.opendns.com":
from subprocess import check_output
ip = check_output(["dig", "+short", "@resolver1.opendns.com",
"myip.opendns.com"]).decode().strip()
Trên Windows, bạn có thể thử nslookup
.
Không có mô-đun dns trong Python stdlib cho phép chỉ định máy chủ dns tùy chỉnh. Bạn có thể sử dụng thư viện của bên thứ ba, ví dụ:, Twisted để làm cho truy vấn dns:
from twisted.internet import task # $ pip install twisted
from twisted.names.client import Resolver
from twisted.python.util import println
def main(reactor):
opendns_resolvers = [("208.67.222.222", 53), ("208.67.220.220", 53)]
resolver = Resolver(servers=opendns_resolvers, reactor=reactor)
# use magical hostname to get our public ip
return resolver.getHostByName('myip.opendns.com').addCallback(println)
task.react(main)
Dưới đây là cùng sử dụng dnspython
library:
import dns.resolver # $ pip install dnspython
resolver = dns.resolver.Resolver(configure=False)
resolver.nameservers = ["208.67.222.222", "208.67.220.220"]
print(resolver.query('myip.opendns.com')[0])
nhưng một dịch vụ khác: 'curl icanhazip.com' – jfs
Nó đã chết rồi. – maxywb