Ne Python yolu whois veritabanı kayıtlarını kontrol etmek önerirsiniz?

oy
8

Bir webservice yukarı almaya çalışırken aslında whois veritabanları kontrol etmek gerektirdiğini koşuyorum. Ya şimdi yapıyorum çirkin ve ben mümkün olduğunca koruyacağım olarak bunu önlemek istiyorum: Ben gwhois komutu çağırır ve çıkışını ayrıştırmak. Çirkin.

Ben bu görevi yerine getirecek pythonic yolunu bulmaya bazı arama yaptı. Genellikle oldukça fazla bir şey yok - bu eski tartışma listesi bağlantı alanı varsa kontrol etmek için bir yol vardır. Oldukça değil ne ı ... arıyordu Ama yine de iyi Google bana verdi anwser oldu - her şey unanwsered sorulardan sadece bir grup olduğunu.

İçinizde bazı yöntem oluşturup kullanmaya başlamanız için başardılar? Çok bazı ipuçları takdir olur, yoksa sadece oturup kendim kod şey, o opensource yönlü yapmalıyım? :)

Oluştur 08/09/2008 saat 17:43
kaynak kullanıcı
Diğer dillerde...                            


9 cevaplar

oy
0

Bunu yapmanın bir başka yolu kullanmaktır urllib2başka sayfanın whois hizmeti (yani var gibi birçok site) ayrıştırmak için modül. Ama bu, şu anda ne kesmek hatta daha fazla gibi görünüyor ve size kötü seçtiğiniz ne olursa olsun whois sitedeki bir bağımlılık verecekti.

Bunu söylemekten nefret ediyorum ama sen yeniden düzenlemesini istemedikçe whoisçalışan, (tekerleği yeniden icat edileceği) Programda whoisOS ve çıkışı ayrıştırma (yani şu anda ne yapıyorsun) doğru yolu gibi görünüyor yap.

Cevap 08/09/2008 saat 17:53
kaynak kullanıcı

oy
0

Başka bir web sayfasını Ayrıştırma (kendi html varsayarak çok kötü woulnd't) kadar kötü woulnd't, ama aslında onlara beni bağla - onlar aşağı iseniz, varım :)

: Aslında sourceforge bazı eski projeyi bulundu rwhois.py . Ne beni korkutuyor biraz sadece, ben Eh, zaten bu projeye bağlantı sonrası obligued hissetti ... Şu anda yaptığımız işin reimplementation başlamak için iyi bir yer olarak görünebilir, onların son güncelleme 2003 den olmasıdır Ama daha fazla referans için.

Cevap 08/09/2008 saat 18:00
kaynak kullanıcı

oy
5

Ne istediğinizi yapmak için bir komut satırı yardımcı programını kullanarak yanlış bir şey yok. Eğer hizmet etrafında güzel bir sarıcı koyarsanız, internals Ancak istiyorum uygulayabilirsiniz! Örneğin:

class Whois(object):
    _whois_by_query_cache = {}

    def __init__(self, query):
        """Initializes the instance variables to defaults. See :meth:`lookup`
        for details on how to submit the query."""
        self.query = query
        self.domain = None
        # ... other fields.

    def lookup(self):
        """Submits the `whois` query and stores results internally."""
        # ... implementation

Şimdi, kendi kullanarak urllib rulo olsun ya da olmasın, (yaptığın gibi) komut satırı yardımcı programı etrafında sarmak veya bir üçüncü taraf kitaplığı içe ve (gibi kullanan diyorsun ki ), bu arayüz aynı kalır.

Bu yaklaşım genellikle hiç çirkin kabul edilmez - bazen yardımcı programları ne istersen yap komuta ve bunları kaldıraç gerekir . Hızı darboğaz olmak biter ederse, soyutlama istemci koduna şeffaf bir yerli Python uygulamasına geçiş işlemini yapar.

Pratiklik saflık yener - o Pythonic olan bu. :)

Cevap 10/09/2008 saat 20:44
kaynak kullanıcı

oy
1

gwhois sunucu çıkışı ile özel bir şey yaparsa bilmiyorum; ancak, açıkça liman whois (43) üzerine whois sunucuya bağlanabilirsiniz, cevapta tüm verileri okumak ve bunları ayrıştırmak, geçecektir. biraz daha kolay bir hayat kurmak için bunun yerine düz priz (whois protokol telnet protokolü çok daha basit olsa bile) telnetlib.Telnet sınıfını kullanabilirsiniz.

zor parçalar:

  • hangi whois sunucusu soracaktır? alan adları dışındaki istekler için yararlı verilerle cevap aldıklarından bu RIPE, ARIN, APNIC, LACNIC, AFRINIC, JPNIC, Verio vb LACNIC, yararlı bir geri dönüş olabilir.
  • Her whois sunucu için kesin seçenekler ve bağımsız değişkenler nelerdir? Bazı teklif yardım diğerleri yok. Genelde, düz alan adları herhangi bir özel seçenekler olmadan çalışır.
Cevap 15/09/2008 saat 23:23
kaynak kullanıcı

oy
0
import socket
socket.gethostbyname_ex('url.com')

Döndürdüğü olmadığını biliyor bir gaierror herhangi DNS ile kayıtlı değil biliyorum

Cevap 09/03/2010 saat 09:07
kaynak kullanıcı

oy
0

Burada benim için çalışan bir hazır kullanımlı bir çözümdür; Python 3.1 için yazılmış (Py2.x için backporting zaman bayt / Unicode metin ayrımlar özel dikkat). erişim senin tek nokta yöntemidir DRWHO.whois()etki alanı adı içinde geçirilmesini bekliyor; o zaman olarak yapılandırılmış sağlayıcısını kullanarak adını çözümlemeye çalışır DRWHO.whois_providers[ '*' ](üst düzey alanına göre sağlayıcıları ayırt olabilir Daha kapsamlı bir koruma). DRWHO.whois()Tek bir girişle bir sözlük dönecektir textWHOIS sunucu tarafından geri gönderilen yanıt metni içerir. Yine, daha sonra denemek ve ayrıştırmak (standart bir format olmadığı için, her bir sağlayıcının ayrı yapılmalıdır) metin ve (daha yapısal biçimi dönecekti daha eksiksiz bir çözüm örneğin bir bayrakavailablehangi alan) mevcuttur görünüyor olup olmadığını belirtir. iyi eğlenceler!

##########################################################################
import asyncore as                                   _sys_asyncore
from asyncore import loop as                         _sys_asyncore_loop
import socket as                                     _sys_socket



##########################################################################
class _Whois_request( _sys_asyncore.dispatcher_with_send, object ):
  # simple whois requester
  # original code by Frederik Lundh

  #-----------------------------------------------------------------------
  whoisPort = 43

  #-----------------------------------------------------------------------
  def __init__(self, consumer, host, provider ):
    _sys_asyncore.dispatcher_with_send.__init__(self)
    self.consumer = consumer
    self.query    = host
    self.create_socket( _sys_socket.AF_INET, _sys_socket.SOCK_STREAM )
    self.connect( ( provider, self.whoisPort, ) )

  #-----------------------------------------------------------------------
  def handle_connect(self):
    self.send( bytes( '%s\r\n' % ( self.query, ), 'utf-8' ) )

  #-----------------------------------------------------------------------
  def handle_expt(self):
    self.close() # connection failed, shutdown
    self.consumer.abort()

  #-----------------------------------------------------------------------
  def handle_read(self):
    # get data from server
    self.consumer.feed( self.recv( 2048 ) )

  #-----------------------------------------------------------------------
  def handle_close(self):
    self.close()
    self.consumer.close()


##########################################################################
class _Whois_consumer( object ):
  # original code by Frederik Lundh

  #-----------------------------------------------------------------------
  def __init__( self, host, provider, result ):
    self.texts_as_bytes = []
    self.host           = host
    self.provider       = provider
    self.result         = result

  #-----------------------------------------------------------------------
  def feed( self, text ):
    self.texts_as_bytes.append( text.strip() )

  #-----------------------------------------------------------------------
  def abort(self):
    del self.texts_as_bytes[:]
    self.finalize()

  #-----------------------------------------------------------------------
  def close(self):
    self.finalize()

  #-----------------------------------------------------------------------
  def finalize( self ):
    # join bytestrings and decode them (witha a guessed encoding):
    text_as_bytes         = b'\n'.join( self.texts_as_bytes )
    self.result[ 'text' ] = text_as_bytes.decode( 'utf-8' )


##########################################################################
class DRWHO:

  #-----------------------------------------------------------------------
  whois_providers = {
    '~isa':   'DRWHO/whois-providers',
    '*':      'whois.opensrs.net', }

  #-----------------------------------------------------------------------
  def whois( self, domain ):
    R         = {}
    provider  = self._get_whois_provider( '*' )
    self._fetch_whois( provider, domain, R )
    return R

  #-----------------------------------------------------------------------
  def _get_whois_provider( self, top_level_domain ):
    providers = self.whois_providers
    R         = providers.get( top_level_domain, None )
    if R is None:
      R = providers[ '*' ]
    return R

  #-----------------------------------------------------------------------
  def _fetch_whois( self, provider, domain, pod ):
    #.....................................................................
    consumer  = _Whois_consumer(           domain, provider, pod )
    request   = _Whois_request(  consumer, domain, provider )
    #.....................................................................
    _sys_asyncore_loop() # loops until requests have been processed


#=========================================================================
DRWHO = DRWHO()


domain    = 'example.com'
whois     = DRWHO.whois( domain )
print( whois[ 'text' ] )
Cevap 09/03/2010 saat 15:17
kaynak kullanıcı

oy
8

Bu bak: http://code.google.com/p/pywhois/

pywhois - alanların WHOIS bilgilerini almak için Python modülü

Hedef: - belirli bir alanın çözümlenen WHOIS veri üretecek basit importable Python modülü oluşturun. - Tüm popüler TLD'leri için veri ayıklamak için Able (com, org, net, ...) - diğerleri yaptığı gibi bir ara bir web servisi aracılığıyla gitme yerine doğrudan bir WHOIS sunucu sorgula. - Python 2.4+ ve hiçbir dış bağımlılıkları ile çalışır

Örnek:

>>> import pywhois
>>> w = pywhois.whois('google.com')
>>> w.expiration_date
['14-sep-2011']
>>> w.emails
['contact-admin@google.com',
 'dns-admin@google.com',
 'dns-admin@google.com',
 'dns-admin@google.com']
>>> print w
...
Cevap 02/11/2010 saat 12:53
kaynak kullanıcı

oy
4

İşte whois istemcisi Python yeniden uygulanır: http://code.activestate.com/recipes/577364-whois-client/

Cevap 30/03/2011 saat 23:37
kaynak kullanıcı

oy
6

bir piton whois kütüphane için kendi arama sürecinde bu soruyu bulundu.

Ben bir komut sarar kütüphane kullanarak her zaman en iyi yolu olduğunu cdleary en yanıta katılabilir bilmiyor musunuz - ama bu neden söylediğini kendince nedenleri görebilirsiniz.

Pro: komut satırı whois tüm zor işleri (soket aramaları, ayrıştırma vb) kolları

Con: taşınabilir değildir; Modül yatan whois komutu bağlı çalışmayabilir. whois komutuna ek olarak bir komut ve büyük olasılıkla kabuğu çalışan beri, yavaş. Etkilenen değil UNIX (Windows), farklı UNIX, eski UNIX veya daha eski whois komutu eğer

Ben whois IP aramalarını işleyebilir bir whois modülü arıyorum ve ben kendi whois istemcisi kodlama ilgilenmiyorum.

Burada (hafifçe) ve daha fazla bilgi bu konuda çalıştı modüller şunlardır:

pywhoisapi:

  • Ev: http://code.google.com/p/pywhoisapi/
  • Tasarım: ARIN whois DİNLENME hizmete erişme DİNLENME istemci
  • Artıları: IP adresi aramalarını işleyebilen
  • Eksileri: diğer RIRS ait whois sunucularından bilgi çekmesi Able?

BulkWhois

  • Ev: http://pypi.python.org/pypi/BulkWhois/0.2.1
  • Tasarım: RIR dan whois telnet sorgu arayüzü erişen Telnet istemcisi (?)
  • Artıları: IP adresi aramalarını işleyebilen
  • Eksileri: diğer RIRS ait whois sunucularından bilgi çekmesi Able?

pywhois:

  • Ev: http://code.google.com/p/pywhois/
  • Tasarım: RRID whois hizmetlerine erişimde DİNLENME istemci
  • Artıları: Birçok RRIDs Accessses; piton 3.x şubesi vardır
  • Eksileri: IP adresi aramalarını işlemek için görünmüyor

piton-whois:

whoisclient - piton-whois çatal

Güncelleme: Ben ne yaptığımı tersine IP aramaları için pywhoisapi kullanarak sona erdi

Cevap 05/07/2012 saat 11:03
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more