dnspython bardzo dobrze wykona moje wyszukiwania DNS, ale całkowicie ignoruje zawartość /etc/hosts
.
Czy istnieje wywołanie biblioteki Pythona, które zrobi właściwą rzecz? tzn. sprawdzaj najpierw etc/hosts
, a w przeciwnym razie wracaj tylko do wyszukiwania DNS?
socket.gethostbyname
, dla bardziej złożonych zapytań, użyj dnspython.Odpowiedzi:
Nie jestem pewien, czy chcesz samodzielnie wyszukiwać DNS, czy po prostu chcesz uzyskać adres IP hosta. Jeśli chcesz to drugie,
źródło
nscd
anslcd
na skrzynkach Unix może to zrobić. Może być również buforowany przez lokalny serwer nazw skonfigurowany do buforowania (typowa konfiguracja, kiedyś. Prawdopodobnie nie tak bardzo teraz). Niestety nie jest to prosta odpowiedź „nie”. Takie rzeczy rzadko się zdarzają. :)Normalne rozpoznawanie nazw w Pythonie działa dobrze. Dlaczego potrzebujesz do tego DNSpython. Po prostu użyj gniazd ,
getaddrinfo
które są zgodne z regułami skonfigurowanymi dla twojego systemu operacyjnego (w Debianie wygląda to następująco/etc/nsswitch.conf
:źródło
addrs = [ str(i[4][0]) for i in socket.getaddrinfo(name, 80) ]
daje mi listę adresów IP.wyświetla listę adresów dla www.example.com. (ipv4 i ipv6)
źródło
Ten kod działa dobrze w przypadku zwracania wszystkich adresów IP, które mogą należeć do określonego identyfikatora URI. Ponieważ wiele systemów znajduje się obecnie w środowisku hostowanym (AWS / Akamai / itp.), Systemy mogą zwracać kilka adresów IP. Lambda została „pożyczona” od @Peter Silva.
źródło
Powyższa odpowiedź była przeznaczona dla Pythona 2. Jeśli używasz Pythona 3, oto kod.
źródło
Znalazłem sposób, aby rozwinąć nazwę hosta DNS RR, która rozwija się do listy adresów IP, do listy nazw hostów członków:
Który po uruchomieniu wyświetla kilka nazw hostów 1e100.net:
źródło