2012-09-06 16 views
15

के लिए पायथन मॉड्यूल क्या कोई पाइथन-मॉड्यूल है जो nslookup के समान सामान कर रहा है? मैं स्क्रैप किए जाने वाले यूआरएल के डोमेन से संबंधित कुछ जानकारी खोदने पर nslookup का उपयोग करने की योजना बना रहा हूं। मुझे पता है कि मैं oslookup को कॉल करने के लिए os.sys का उपयोग कर सकता हूं लेकिन मैं बस सोच रहा हूं कि इसके लिए पहले से ही पाइथन-मॉड्यूल है या नहीं। अग्रिम धन्यवाद!nslookup

उत्तर

7

आप सॉकेट पुस्तकालय का उपयोग करना चाहिए http://docs.python.org/2/library/socket.html

प्रणाली समारोह कॉल इस मामले में एक अच्छा अभ्यास नहीं है।

12

आप मैं निम्नलिखित कोड का उपयोग कर रहा DNSPython

import dns.resolver 

answers = dns.resolver.query('dnspython.org', 'MX') 
for rdata in answers: 
    print 'Host', rdata.exchange, 'has preference', rdata.preference 
14

उपयोग करने की आवश्यकता:

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)) 
5

ध्यान दें कि 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 

Oooops! कि हल करने के लिए, एकमात्र समाधान मैं जानता हूँ कि इस प्रकार /etc/hosts बदलने के लिए है:

$ cat /etc/hosts 
127.0.0.1  myserver myserver.mydomain.local localhost.localdomain localhost 

आशा है कि यह मदद करता है!

+0

जबकि सच और पूरी तरह से, इस स्थानीय सिस्टम का होस्ट/FQDN ऊपर लग रहा है। ओपी ने पूछा कि साइट स्क्रैपिंग के लिए बाहरी डीएनएस नाम कैसे देखें। जानकारी के लिए अभी भी +1। – VooDooNOFX

5

समस्या यह है कि socket.gethostbyname() केवल एक आईपी-पता देता है। 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'] 
0

मैं एडब्ल्यूएस रूट 53 में एक रिकॉर्ड CNAME उपलब्ध का उपयोग कर नीचे ट्रैक करने के लिए की जरूरत है। AKA messaging.myCompany.com से moreSpecificMessaging.myCompanyInternal.com

मैं सॉकेट का उपयोग भी करता हूं, लेकिन एक और छुपा विधि।

import socket 

addr1 = socket.gethostbyname_ex('google.com') 

print(addr1) 

https://docs.python.org/3/library/socket.html#socket.gethostbyname_ex