Nslookupと同じことをしているpythonモジュールはありますか? nslookupを使用して、廃棄するURLのドメインに関する情報を掘り下げる予定です。 os.sysを使用してnslookupを呼び出すことができることは知っていますが、このためのpython-moduleが既にあるのかどうか疑問に思っています。前もって感謝します!
私は次のコードを使用しています:
import socket
ip_list = []
ais = socket.getaddrinfo("www.yahoo.com",0,0,0,0)
for result in ais:
ip_list.append(result[-1][0])
ip_list = list(set(ip_list))
または、理解度を次のように使用します。
ip_list = list({addr[-1][0] for addr in socket.getaddrinfo(name, 0, 0, 0, 0)})
DNSPython を使用する必要があります
import dns.resolver
answers = dns.resolver.query('dnspython.org', 'MX')
for rdata in answers:
print 'Host', rdata.exchange, 'has preference', rdata.preference
ソケットライブラリを使用する必要があります http://docs.python.org/2/library/socket.html
この場合、システム関数呼び出しはお勧めできません。
問題は、socket.gethostbyname()が1つのIPアドレスしか返さないことです。 nslookupは、できるだけ多くを返します。私が使う:
import subprocess
process = subprocess.Popen(["nslookup", "www.google.com"], stdout=subprocess.PIPE)
output = process.communicate()[0].split('\n')
ip_arr = []
for data in output:
if 'Address' in data:
ip_arr.append(data.replace('Address: ',''))
ip_arr.pop(0)
print ip_arr
印刷されます:
['54.230.228.101', '54.230.228.6', '54.230.228.37', '54.230.228.80', '54.230.228.41', '54.230.228.114', '54.230.228.54', '54.230.228.23']
socket.getfqdn()
はホスト名の完全修飾名を返すことができることに注意してください。参照: http://docs.python.org/2/library/socket.html?highlight=socket.getaddrinfo#socket.getfqdn
例えば:
_python -c 'import socket; print(socket.gethostname()); print(socket.getfqdn());'
myserver
myserver.mydomain.local
_
ただし、結果は_/etc/hosts
_構成に依存します。あなたが持っている場合:
_$ cat /etc/hosts
127.0.0.1 myserver localhost.localdomain localhost
_
socket.getfqdn()
の結果は次のようになります。
_python -c 'import socket; print(socket.getfqdn());'
localhost.localdomain
_
おっと!それを解決するための唯一の解決策は、次のように_/etc/hosts
_を変更することです。
_$ cat /etc/hosts
127.0.0.1 myserver myserver.mydomain.local localhost.localdomain localhost
_
それが役に立てば幸い!
CNamesを使用してAWS Route 53のAレコードを追跡する必要がありました。別名messaging.myCompany.com
からmoreSpecificMessaging.myCompanyInternal.com
Socketも使用しますが、もう1つの隠された方法です。
import socket
addr1 = socket.gethostbyname_ex('google.com')
print(addr1)
https://docs.python.org/3/library/socket.html#socket.gethostbyname_ex
以前の回答は正しいですが、ここに私が使用するものがあります socket 、「BSDソケットインターフェイスへのアクセスを提供します。最新のすべてのUnixシステム、Windows、MacOS、おそらく追加のプラットフォームで利用可能です」
import socket
distinct_ips = []
# 0,0,0,0 is for (family, type, proto, canonname, sockaddr)
#change some_site.com to whatever your are looking up of course
socket_info = socket.getaddrinfo("some_site.com",0,0,0,0)
for result in socket_info:
ns_ip = result[4][0]
if distinct_ips.count(ns_ip)==0:
distinct_ips.append(ns_ip)
print(ns_ip)
NslookupまたはDigがシステムにインストールされていない場合、インタラクティブな使用のために、nslookupに適したdnsルックアップ出力を使用します
import socket,argparse
def main(args):
fqdn = args.fqdn
try:
ip_addr = socket.gethostbyname(fqdn)
server_info()
print 'Name: ' + fqdn
print 'Address: ' + ip_addr
except socket.gaierror:
server_info()
print "** server can't find {0}: NXDOMAIN".format(fqdn)
def server_info():
lines = [line.rstrip('\n') for line in open('/etc/resolv.conf')]
for line in lines:
if line.startswith('nameserver'):
print 'Server:\t\t' + line.split()[1]
print 'Address:\t' + line.split()[1] + '#53\n'
break
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Python nslookup utility')
parser.add_argument('fqdn', type=str, help='Fully qualified domain name')
args = parser.parse_args()
main(args)
私は次のコードを使用しています:
import socket
addr1 = socket.gethostbyname('google.com')
addr2 = socket.gethostbyname('yahoo.com')
print(addr1, addr2)