хорошо, похоже, все должно быть очень просто, но я немного запутался:
у меня есть два значения - домен и IP
лучше всего описано с кодом:
whois_result = Popen(['whois', str(domain)], stdout=PIPE,stderr=STDOUT).communicate()[0]
debug_output(whois_result)
if 'Not found' or 'No entries' in whois_result:
print "Processing whois failure on '%s'" % str(domain)
print "Trying the IP (%s) instead..." % ip
whois_result = Popen(['whois', ip], stdout=PIPE,stderr=STDOUT).communicate()[0]
debug_output(whois_result)
if 'Not found' or 'No entries' in whois_result:
print "complete and utter whois failure, its you isnt it, not me."
return False
else:
test = re.search("country.+([A-Z].)",whois_result)
countryid = test.group(1)
, поэтому эта функция проверяет whois домена, если она не находит его, она проверяет whois с IP-адресом, но я хочу знать, каков наилучший способ проверить, равен ли домен None. проверьте домен и перейдите к проверке ip, но также, если домен НЕ равен None, выполните проверку домена, а затем проверку ip в указанном порядке. Извините, если это просто, меня это немного смущает. Я думаю, я мог бы установить переменную и проверить ее, но есть ли более элегантный способ сделать это?
если поставить сверху
if domain != None:
единственный способ, которым я могу это сделать, - это повторить код или задать переменную. Я думаю, что должны быть другие условные тесты, которые я мог бы использовать, о которых я не знаю.
РЕДАКТИРОВАТЬ: обновление 2 на основе ответов ниже: - Я также ввел код проверки страны с моей базой данных.
def do_whois(data):
if data is not None: return Popen(['whois', str(data)], stdout=PIPE,stderr=STDOUT).communicate()[0]
return 'No entries'
def check_whois(data):
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
if 'No entries' in data or 'Not found' in data or 'No match for' in data:return False
id = re.search("country.+([A-Z].)",data)
if id is None:
print "we didnt get nuttin from whois"
return False
countryid = id.group(1)
# fetch country from countrycode db
cursor.execute("SELECT country,countrycode FROM countries WHERE countrycode = ?",(countryid,))
country = cursor.fetchone()
country = country[0]
print "Server is from: " + country
return (country,countryid)
def find_country(domain, ip):
return check_whois(do_whois(domain)) or check_whois(do_whois(ip))
Отчасти проблема создания этого робота заключается в том, что whois-сервер возвращает различные значения, например, для этого IP: 67.222.137.216
сервер whois возвращает:
@ : whois 67.222.137.216
#
# Query terms are ambiguous. The query is assumed to be:
# "n 67.222.137.216"
#
# Use "?" to get help.
#
#
# The following results may also be obtained via:
# http://whois.arin.net/rest/nets;q=67.222.137.216?showDetails=true&showARIN=false&ext=netref2
#
BLUESQUAREDATAVPSLLC BLUESQUAREDATAVPSLLCNET (NET-67-222-137-213-1) 67.222.137.213 - 67.222.137.244
DFW Datacenter DFW-DATACENTER (NET-67-222-128-0-1) 67.222.128.0 - 67.222.159.255
#
# ARIN WHOIS data and services are subject to the Terms of Use
# available at: https://www.arin.net/whois_tou.html
#
спасибо за любую помощь.