Я создал скрипт, который использует пакет Python, который называется IPWhois. IPWhois создает проанализированные данные записей IP whois. Например:
{'asn': '13968',
'asn_cidr': '12.231.58.0/24',
'asn_country_code': 'US',
'asn_date': '1983-08-23',
'asn_description': 'CAISO-NET-BLK, US',
'asn_registry': 'arin',
'nets': [{'address': '200 S. Laurel AVE.',
'cidr': '12.0.0.0/8',
'city': 'MIDDLETOWN',
'country': 'US',
'created': '1983-08-22',
'description': 'AT&T Services, Inc.',
'emails': ['abuse@att.net',
'jb3310-arin@oz.mt.att.com',
'hk2514@att.com',
'bm870e@intl.att.com',
'swipid@icorefep1.ims.att.com',
'addrmgt@qsun.att.com'],
'handle': 'NET-12-0-0-0-1',
'name': 'ATT',
'postal_code': '07748',
'range': '12.0.0.0 - 12.255.255.255',
'state': 'NJ',
'updated': '2013-12-19'},
{'address': '1000 S FREMONT ST',
'cidr': '12.231.58.0/24',
'city': 'ALHAMBRA',
'country': 'US',
'created': '2009-03-06',
'description': 'CALIFORNIA ISO',
'emails': ['RMelis@caiso.com', 'shendrickson@caiso.com'],
'handle': 'NET-12-231-58-0-1',
'name': 'CALIFORN50-58',
'postal_code': '91803',
'range': None,
'state': 'CA',
'updated': '2009-03-06'}],
'nir': None,
'query': '12.231.58.214',
'raw': None,
'raw_referral': None,
'referral': None}
Мой полный сценарий находится здесь, где он читает из файла (список IP-адресов), выполняет поиск ipwhois на каждом IP, затем выводит IP, диапазон CIDR и электронную почту адрес в каждой записи whois.
import pandas as pd
from ipwhois import IPWhois
def get_email(x):
try:
email = x['nets'][0]['emails'][0]
except TypeError:
email = None
return email
df = pd.read_csv('C:[file_path]ip_test.csv', names=['ip'])
df['whois_obj'] = df['ip'].apply(IPWhois)
df['result'] = df['whois_obj'].apply(lambda x: x.lookup_whois(asn_methods=['dns','whois','http']))
df['cidr'] = df['result'].apply(lambda x: x['nets'][0]['cidr'])
df['email_orgdomain'] = df['result'].apply(get_email)
#df['email_orgdomain'] = df['result'].apply(lambda x: x['nets'][0]['emails'][0].split('@')[-1])
df.drop(columns=['whois_obj', 'result'], inplace=True)
df
Мой текущий вывод фрейма данных выглядит следующим образом, однако я хочу видеть ВСЕ уникальные адреса электронной почты в последнем столбце, которые будут присутствовать в записи whois. Письма в этом примере приведены только для контекстной справки:
ip cidr email
0 50.28.53.255 50.28.0.0/17 liquidweb.com
1 82.94.177.112 82.94.177.96/27 xs4all.nl
2 213.206.90.234 213.206.90.128/25 kpn.com
3 85.222.239.107 85.222.236.0/22 atom86.net
4 85.222.239.101 85.222.236.0/22 atom86.net
5 91.213.201.45 91.213.201.0/24 None
6 43.251.240.6 43.251.240.0/22 au.abnamroclearing.com
7 140.86.230.51 140.86.230.0/24 oracle.com
Мне нужна помощь для l oop по всем адресам электронной почты в моей функции def get_email(x)
и для добавления уникального адреса в набор. Обратите внимание, что в приведенном мной примере с данными whois есть два поля под названием «электронная почта», одно из которых относится к доменам att.com, а другое - к доменам caiso.com. Это связано с тем, что некоторые записи ARIN содержат информацию о регистранте для родительского CIDR, а также для дочернего CIDR.
Я хотел бы, чтобы все уникальные адреса электронной почты были указаны во всех полях с названием «email».
Большое спасибо за любую помощь!