के लिए पायथन मॉड्यूल क्या कोई पाइथन-मॉड्यूल है जो nslookup के समान सामान कर रहा है? मैं स्क्रैप किए जाने वाले यूआरएल के डोमेन से संबंधित कुछ जानकारी खोदने पर nslookup का उपयोग करने की योजना बना रहा हूं। मुझे पता है कि मैं oslookup को कॉल करने के लिए os.sys का उपयोग कर सकता हूं लेकिन मैं बस सोच रहा हूं कि इसके लिए पहले से ही पाइथन-मॉड्यूल है या नहीं। अग्रिम धन्यवाद!nslookup
nslookup
उत्तर
आप सॉकेट पुस्तकालय का उपयोग करना चाहिए http://docs.python.org/2/library/socket.html
प्रणाली समारोह कॉल इस मामले में एक अच्छा अभ्यास नहीं है।
आप मैं निम्नलिखित कोड का उपयोग कर रहा DNSPython
import dns.resolver
answers = dns.resolver.query('dnspython.org', 'MX')
for rdata in answers:
print 'Host', rdata.exchange, 'has preference', rdata.preference
उपयोग करने की आवश्यकता:
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))
ध्यान दें कि 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
आशा है कि यह मदद करता है!
समस्या यह है कि 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']
मैं एडब्ल्यूएस रूट 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
जबकि सच और पूरी तरह से, इस स्थानीय सिस्टम का होस्ट/FQDN ऊपर लग रहा है। ओपी ने पूछा कि साइट स्क्रैपिंग के लिए बाहरी डीएनएस नाम कैसे देखें। जानकारी के लिए अभी भी +1। – VooDooNOFX