Τι Python τρόπο θα προτείνατε για να ελέγξετε whois αρχεία βάσεων δεδομένων;

ψήφοι
8

Προσπαθώ να πάρει ένα webservice οργανωθεί και να λειτουργήσει η πραγματικότητα απαιτεί να ελέγξετε whois βάσεις δεδομένων. Αυτό που κάνω τώρα είναι άσχημο και θα ήθελα να το αποφύγουμε όσο μπορώ: Καλώ εντολή gwhois και να αναλύσει την παραγωγή της. Ασχημος.

Έκανα κάποια έρευνα για να προσπαθήσουμε να βρούμε μια pythonic τρόπος για να γίνει αυτό το έργο. Γενικά πήρα αρκετά μεγάλο τίποτα - αυτό το παλιό σύνδεσμο λίστα συζήτηση έχει έναν τρόπο για να ελέγξετε αν υπάρχουν τομέα. Αρκετά δεν είναι αυτό που έψαχνα ... Αλλά και πάλι, αυτό ήταν το καλύτερο anwser Google μου έδωσε - όλα τα άλλα είναι απλώς ένα μάτσο unanwsered ερωτήσεις.

Οποιοσδήποτε από εσάς έχουν καταφέρει να πάρει κάποια μέθοδο συσταθεί και να λειτουργήσει; Είχα πάρα πολύ εκτιμώ μερικές συμβουλές, ή θα πρέπει να το κάνετε ακριβώς το opensource-τρόπο, να καθίσει και ο κωδικός κάτι από τον εαυτό μου; :)

Δημοσιεύθηκε 08/09/2008 στις 17:43
πηγή χρήστη
Σε άλλες γλώσσες...                            


9 απαντήσεις

ψήφοι
0

Ένας άλλος τρόπος για να το κάνετε είναι να χρησιμοποιήσετε urllib2ενότητα για να αναλύσει whois υπηρεσία κάποιου άλλου σελίδας (πολλές ιστοσελίδες όπως το που υπάρχουν). Αλλά αυτό μοιάζει ακόμη περισσότερο από ένα hack που αυτό που κάνουμε τώρα, και θα σας δώσει μια εξάρτηση από ό, τι whois χώρο που επιλέξατε, το οποίο είναι κακό.

Μισώ να το πω, αλλά αν θέλετε να επανεξετάσει την εφαρμογή whoisτου προγράμματός σας (το οποίο θα πρέπει να ξανα-ανακαλύψει τον τροχό), που τρέχει whoisμε το λειτουργικό σύστημα και την ανάλυση της εξόδου (δηλαδή αυτό που κάνετε τώρα) φαίνεται σαν το σωστό τρόπο για να Κάνε το.

Απαντήθηκε 08/09/2008 στις 17:53
πηγή χρήστη

ψήφοι
0

Parsing άλλη ιστοσελίδα woulnd't να είναι τόσο κακή (υποθέτοντας html τους woulnd't είναι πολύ κακό), αλλά θα συνδέσει πραγματικά μου για να τους - αν είναι κάτω, είμαι κάτω :)

Στην πραγματικότητα βρήκα κάποια παλιά έργο για sourceforge: rwhois.py . Αυτό που με φοβίζει λίγο είναι ότι η τελευταία ενημέρωση τους από το 2003. Ωστόσο, αυτό μπορεί να φαίνεται σαν ένα καλό μέρος για να ξεκινήσετε νέας υλοποίησης του τι κάνω τώρα ... Λοιπόν, ένιωσα obligued να δημοσιεύσετε το σύνδεσμο προς αυτό το έργο έτσι κι αλλιώς, μόνο για περαιτέρω αναφορά.

Απαντήθηκε 08/09/2008 στις 18:00
πηγή χρήστη

ψήφοι
5

Δεν υπάρχει τίποτα λάθος με τη χρήση βοηθητικό πρόγραμμα γραμμής εντολών για να κάνετε ό, τι θέλετε. Αν βάλετε ένα ωραίο περιτύλιγμα γύρω από την υπηρεσία, μπορείτε να εφαρμόσετε τα εσωτερικά όμως θέλετε! Για παράδειγμα:

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

Τώρα, αν δεν φέρετε τα δικά σας χρησιμοποιώντας urllib, τυλίξτε γύρω από ένα βοηθητικό πρόγραμμα γραμμής εντολών (σαν να κάνεις), ή να εισάγετε ένα τρίτο βιβλιοθήκη κόμμα και να τις χρησιμοποιούν (όπως λέτε ), αυτή η διασύνδεση παραμένει η ίδια.

Αυτή η προσέγγιση δεν θεωρείται γενικά άσχημο καθόλου - μερικές φορές εντολή επιχειρήσεις κοινής ωφέλειας να κάνει ό, τι θέλετε και θα πρέπει να είναι σε θέση να τις αξιοποιήσουν . Αν η ταχύτητα καταλήγει να είναι μια δυσχέρεια, αφαίρεση σας καθιστά τη διαδικασία της μετάβασης σε μια εγγενή εφαρμογή Python διαφανής για τον κωδικό πελάτη σας.

Πρακτικότητα κτυπά καθαρότητα - αυτό είναι ό, τι είναι Pythonic. :)

Απαντήθηκε 10/09/2008 στις 20:44
πηγή χρήστη

ψήφοι
1

Δεν ξέρω αν gwhois κάνει κάτι το ιδιαίτερο με την έξοδο server? Ωστόσο, μπορείτε απλά να συνδεθείτε με το whois server στο λιμάνι whois (43), στείλτε το ερώτημα σας, διαβάστε όλα τα δεδομένα στην απάντηση και να αναλύσει τους. Για να κάνουμε τη ζωή λίγο πιο εύκολη, μπορείτε να χρησιμοποιήσετε την κλάση telnetlib.Telnet (ακόμη και αν η whois πρωτόκολλο είναι πολύ πιο απλό από ό, τι το πρωτόκολλο telnet) αντί του απλού πρίζες.

Τα δύσκολα μέρη:

  • η οποία whois server θα σας ρωτήσω; RIPE, ARIN, APNIC, LACNIC, AfriNIC, JPNIC, VERIO κλπ LACNIC θα μπορούσε να είναι μια χρήσιμη εναλλακτική, δεδομένου ότι τείνουν να απαντήσει με χρήσιμα στοιχεία για τις αιτήσεις εκτός του τομέα τους.
  • ποιες είναι οι ακριβείς επιλογές και τα επιχειρήματα για κάθε whois server; κάποια προσφέρουμε βοήθεια, άλλοι όχι. Σε γενικές γραμμές, απλά ονόματα τομέα λειτουργούν χωρίς ειδικές επιλογές.
Απαντήθηκε 15/09/2008 στις 23:23
πηγή χρήστη

ψήφοι
0
import socket
socket.gethostbyname_ex('url.com')

αν επιστρέψει ένα gaierror γνωρίζετε ξέρετε ότι δεν είναι εγγεγραμμένοι με οποιονδήποτε DNS

Απαντήθηκε 09/03/2010 στις 09:07
πηγή χρήστη

ψήφοι
0

Εδώ είναι ένα έτοιμο προς χρήση διάλυμα που λειτουργεί για μένα? γραμμένο για την Python 3.1 (όταν backporting να Py2.x, προσέξτε ιδιαίτερα τις διακρίσεις κειμένου bytes / Unicode). ενιαίο σημείο πρόσβασης είναι η μέθοδος DRWHO.whois(), η οποία αναμένει ένα όνομα τομέα για να περάσει το? τότε θα προσπαθήσει να επιλύσει το όνομα, χρησιμοποιώντας την υπηρεσία παροχής διαμορφώνεται ως DRWHO.whois_providers[ '*' ](μια πιο ολοκληρωμένη λύση θα μπορούσε να διαφοροποιήσει τους παρόχους ανάλογα με το τομέα ανωτάτου επιπέδου). DRWHO.whois()θα επιστρέψει ένα λεξικό με μία μόνο είσοδο text, η οποία περιέχει το κείμενο απάντησης αποστέλλονται πίσω από το WHOIS διακομιστή. Και πάλι, μια πιο ολοκληρωμένη λύση, στη συνέχεια, θα προσπαθήσουμε και να αναλύσει το κείμενο (το οποίο πρέπει να γίνει ξεχωριστά για κάθε πάροχο, καθώς δεν υπάρχει τυποποιημένη μορφή) και να επιστρέψει μια πιο δομημένη μορφή (π.χ., που μια σημαία availableη οποία καθορίζει εάν ή όχι τα βλέμματα τομέα διαθέσιμος). καλα να περνατε!

##########################################################################
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' ] )
Απαντήθηκε 09/03/2010 στις 15:17
πηγή χρήστη

ψήφοι
8

Κοίτα αυτό: http://code.google.com/p/pywhois/

pywhois - Python ενότητα για την ανάκτηση WHOIS πληροφορίες των τομέων

Στόχος: - Δημιουργία ενός απλού εισάγονται μονάδα Python που θα παράγει αναλυμένη WHOIS δεδομένων για ένα συγκεκριμένο τομέα. - Ικανός να εξαγάγετε τα δεδομένα για όλες τις δημοφιλείς καταλήξεις (com, org, net, ...) - Ερώτημα ένα WHOIS διακομιστή άμεσα αντί να διέρχεται μια ενδιάμεση υπηρεσία web όπως και πολλοί άλλοι. - Λειτουργεί με Python 2.4+ και χωρίς εξωτερικές εξαρτήσεις

Παράδειγμα:

>>> 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
...
Απαντήθηκε 02/11/2010 στις 12:53
πηγή χρήστη

ψήφοι
4

Εδώ είναι το whois πελάτη εκ νέου σε εφαρμογή σε Python: http://code.activestate.com/recipes/577364-whois-client/

Απαντήθηκε 30/03/2011 στις 23:37
πηγή χρήστη

ψήφοι
6

Βρέθηκαν σε αυτήν την ερώτηση στη διαδικασία της δικής μου αναζήτηση για ένα python whois βιβλιοθήκη.

Δεν ξέρω ότι συμφωνώ με την απάντηση cdleary ότι χρησιμοποιώντας μια βιβλιοθήκη που τυλίγει μια εντολή είναι πάντα ο καλύτερος τρόπος να πάει - αλλά μπορώ να δω τους λόγους για τους οποίους είπε αυτό.

Pro: cmd-line whois χειρίζεται όλη τη σκληρή δουλειά (κλήσεις υποδοχή, την ανάλυση, κλπ)

Con: Δεν φορητό? ενότητα μπορεί να μην λειτουργεί ανάλογα με υποκείμενη whois εντολή. Βραδύτερη, δεδομένου ότι τρέχει μια εντολή και πιθανότατα κέλυφος εκτός από την εντολή whois. Επηρεαστεί εάν δεν UNIX (Windows), διαφορετικά UNIX, παλαιότερα UNIX, ή μεγαλύτερης ηλικίας whois εντολή

Ψάχνω για μια whois μονάδα που μπορεί να χειριστεί whois αναζητήσεις IP και δεν είμαι ενδιαφέρονται για την κωδικοποίηση δική μου whois πελάτη.

Εδώ είναι οι ενότητες που έχω (ελαφρά) δοκίμασε και περισσότερες πληροφορίες σχετικά με αυτό:

pywhoisapi:

  • Αρχική: http://code.google.com/p/pywhoisapi/
  • πελάτη ΥΠΟΛΟΙΠΟ πρόσβαση ARIN whois υπηρεσία ΠΕΡΙΦΕΡΕΙΑ: Μελέτη
  • Πλεονεκτήματα: Ικανός να χειριστεί αναζητήσεις διεύθυνση IP
  • Μειονεκτήματα: Ικανός να τραβήξει πληροφορίες από whois servers άλλων RIRs;

BulkWhois

  • Αρχική: http://pypi.python.org/pypi/BulkWhois/0.2.1
  • πελάτη telnet πρόσβαση whois interface ερώτημα telnet από RIR: Σχεδιασμός (;)
  • Πλεονεκτήματα: Ικανός να χειριστεί αναζητήσεις διεύθυνση IP
  • Μειονεκτήματα: Ικανός να τραβήξει πληροφορίες από whois servers άλλων RIRs;

pywhois:

  • Αρχική: http://code.google.com/p/pywhois/
  • πελάτη ΥΠΟΛΟΙΠΟ πρόσβαση RRID whois υπηρεσίες: Σχεδιασμός
  • Πλεονεκτήματα: Accessses πολλά RRIDs? έχει υποκατάστημα 3.x πύθωνα
  • Μειονεκτήματα: δεν φαίνεται να χειριστεί αναζητήσεις διεύθυνση IP

python-whois:

  • Αρχική: http://code.google.com/p/python-whois/
  • Σχεδιασμός: τυλίγει «whois» εντολή
  • Μειονεκτήματα: δεν φαίνεται να χειριστεί αναζητήσεις διεύθυνση IP

whoisclient - πιρούνι της python-whois

  • Αρχική: http://gitorious.org/python-whois
  • Σχεδιασμός: τυλίγει «whois» εντολή
  • Εξαρτάται από: IPy.py
  • Μειονεκτήματα: δεν φαίνεται να χειριστεί αναζητήσεις διεύθυνση IP

Ενημέρωση: Κατέληξα να χρησιμοποιούν pywhoisapi για τις αντίστροφες αναζητήσεις IP που έκανα

Απαντήθηκε 05/07/2012 στις 11:03
πηγή χρήστη

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