私のファイルの最初の列の各ドメインをnslookupするためにcsvファイルを使用しています。 私がやっていることは、私のドメインリストのドメインが自分のサーバーと一致するかどうかをチェックすることです。 ドメインのMXレコードが自分のサーバーを指していますか? ドメインのネームサーバがネームサーバと一致していますか?python:変数/文字列としてテキストのstdoutを検索します。
今は設定作業があります。私のサーバーIP /ホスト/ etcのstdoutを検索しています。彼らが一致するかどうか、私は何かを書く。
しかし、MXレコードが自身のサブドメインを指している場合、そのレコードだけが自分のIPの1つであるかどうかを判断できません。これは、イムさんの状況:
例えば、nslookupコマンド:
$ nslookup -type=MX mydomain.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
mydomain.com mail exchanger = 10 mail.mydomain.com.
Authoritative answers can be found from:
mail.mydomain.com internet address = 1.2.3.4 # << I seem to think this isn't always present.
現在のサブドメインの回避策:
elif 'mail.' + row[0] in stdout:
host2ip = socket.gethostbyname('mail.' + row[0])
newdata = [host2ip]
writer.writerow(row + newdata)
しかし、どのようなドメインが使用している場合は、MX = mail2.mydomain.comまたは任意の他のサブドメイン/ A-上記のエラーを記録します。方が良いだろう何
は出力(mail.domain.comまたはmail2.mydomain.comまたは何でも)を使用し、行にそれを書くことである((または以前のように私はsocket.gethostbynameます 値))Iveは私のやりたいことの別の方法を見つけることができません。オンライン検索では、stdoutを使用して追加することが主に指摘されています。どこでのメール交換機= '###のための標準出力を検索し、MX優先順位をprocedingテキスト、または、mail.mydomain.com
全体のpython
#!/usr/bin/python
#
import datetime
import csv
import os, time
import socket
from stat import * # ST_SIZE etc
from subprocess import Popen, PIPE, STDOUT
# Set Date
now = datetime.datetime.now()
today = now.strftime("%m-%d-%Y")
# Files
original = "dns_list.csv"
results = "results/dns_results_" + today + ".csv" #dns_results_04-14-2012.csv
tempfile = results + ".tmp"
# Commands
mxscan = "nslookup -type=MX"
nsscan = "nslookup -type=NS"
ascan = "nslookup -type=A"
digserver = "8.8.8.8"
SP = " "
incsv = open(original, 'rb')
try:
reader = csv.reader(incsv)
outcsv = open(tempfile, 'wb')
try:
writer = csv.writer(outcsv)
for row in reader:
p = Popen(mxscan + SP + row[0] + SP + digserver, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout, empty = p.communicate()
print 'Command: %s\nOutput: %s\n' % (mxscan + SP + row[0] + SP + digserver , stdout)
if not stdout or 'find Zone: NXDOMAIN' in stdout: # 'Zone' is column header
newdata = ['mail exchange']
writer.writerow(row + newdata)
elif 'psmtp.com' in stdout:
newdata = ['Postini']
writer.writerow(row + newdata)
elif 'mail.' + row[0] in stdout:
host2ip = socket.gethostbyname('mail.' + row[0])
newdata = [host2ip]
writer.writerow(row + newdata)
else:
newdata = ['External Email']
writer.writerow(row + newdata)
finally:
outcsv.close()
finally:
incsv.close()
original = tempfile
incsv = open(original, 'rb')
try:
reader = csv.reader(incsv)
outcsv = open(results, 'wb')
try:
writer = csv.writer(outcsv)
for row in reader:
p = Popen(nsscan + SP + row[0], shell=True, stdin=PIPE,stdout=PIPE, stderr=PIPE)
stdout, empty = p.communicate()
print 'Command: %s\nOutput: %s\n' % (mxscan + SP + row[0],stdout)
if not stdout or 'find Zone: NXDOMAIN' in stdout:
newdata = ['A records', 'Action']
writer.writerow(row + newdata)
elif 'nameserver = dauth1.mydomain.com' in stdout or 'nameserver = dauth2.mydomain.com' in stdout:
newdata = ['dauth1/2']
writer.writerow(row + newdata)
elif 'nameserver = ns1.mydomain.com' in stdout or 'nameserver = ns2.mydomain.com' in stdout:
newdata = ['ns1/2']
writer.writerow(row + newdata)
else:
newdata = ['External DNS', 'Delete/Charge']
writer.writerow(row + newdata)
finally:
outcsv.close()
finally:
incsv.close()
print "Writing changes to new file...."
time.sleep(1)
os.remove(tempfile)
print "Complete! Your new file is located at /root/mxscan/" + results
任意の考えを使用したいのですが?
あなたは本当に正しいです、私はこれを読んでから書き直しています。今、私はdns.resolver.NXDOMAINを上げる方法を理解するだけです。喜びのないいくつかの方法を試しました。試行錯誤していますね。再度、感謝します! – Tommy