class Internet(callbacks.Plugin): """Add the help for "@help Internet" here.""" threaded = True def dns(self, irc, msg, args, host): """<host|ip> Returns the ip of <host> or the reverse DNS hostname of <ip>. """ if utils.net.isIP(host): hostname = socket.getfqdn(host) if hostname == host: irc.reply('Host not found.') else: irc.reply(hostname) else: try: result = [] for addressInfo in socket.getaddrinfo(host, 0, 0, 0, socket.SOL_TCP): ip = addressInfo[4][0] if ip == '64.94.110.11': # Verisign sucks! result.append('Host not found.') break result.append(ip) except socket.error: irc.reply('Host not found.') else: irc.reply(" ".join(result)) dns = wrap(dns, ['something']) _domain = ['Domain Name', 'Server Name', 'domain'] _registrar = ['Sponsoring Registrar', 'Registrar', 'source'] _updated = ['Last Updated On', 'Domain Last Updated Date', 'Updated Date', 'Last Modified', 'changed'] _created = ['Created On', 'Domain Registration Date', 'Creation Date'] _expires = ['Expiration Date', 'Domain Expiration Date'] _status = ['Status', 'Domain Status', 'status'] def whois(self, irc, msg, args, domain): """<domain> Returns WHOIS information on the registration of <domain>. """ usertld = domain.split('.')[-1] if '.' not in domain: irc.errorInvalid('domain') return try: t = telnetlib.Telnet('%s.whois-servers.net' % usertld, 43) except socket.error, e: irc.error(str(e)) return t.write(domain) t.write('\r\n') s = t.read_all() server = registrar = updated = created = expires = status = '' for line in s.splitlines(): line = line.strip() if not line or ':' not in line: continue if not server and any(line.startswith, self._domain): server = ':'.join(line.split(':')[1:]).strip().lower() # Let's add this check so that we don't respond with info for # a different domain. E.g., doing a whois for microsoft.com # and replying with the info for microsoft.com.wanadoodoo.com if server != domain: server = '' continue if not server: continue if not registrar and any(line.startswith, self._registrar): registrar = ':'.join(line.split(':')[1:]).strip() elif not updated and any(line.startswith, self._updated): s = ':'.join(line.split(':')[1:]).strip() updated = 'updated %s' % s elif not created and any(line.startswith, self._created): s = ':'.join(line.split(':')[1:]).strip() created = 'registered %s' % s elif not expires and any(line.startswith, self._expires): s = ':'.join(line.split(':')[1:]).strip() expires = 'expires %s' % s elif not status and any(line.startswith, self._status): status = ':'.join(line.split(':')[1:]).strip().lower() if not status: status = 'unknown' try: t = telnetlib.Telnet('whois.pir.org', 43) except socket.error, e: irc.error(str(e)) return
def whois(self, irc, msg, args, domain): """<domain> Returns WHOIS information on the registration of <domain>. """ if utils.net.isIP(domain): whois_server = 'whois.arin.net' usertld = 'ipaddress' elif '.' in domain: usertld = domain.split('.')[-1] whois_server = '%s.whois-servers.net' % usertld else: usertld = None whois_server = 'whois.iana.org' try: sock = utils.net.getSocket( whois_server, vhost=conf.supybot.protocols.irc.vhost(), vhostv6=conf.supybot.protocols.irc.vhostv6(), ) sock.connect((whois_server, 43)) except socket.error as e: irc.error(str(e)) return sock.settimeout(5) if usertld == 'com': sock.send(b'=') elif usertld == 'ipaddress': sock.send(b'n + ') sock.send(domain.encode('ascii')) sock.send(b'\r\n') s = b'' end_time = time.time() + 5 try: while end_time > time.time(): time.sleep(0.1) s += sock.recv(4096) except socket.error: pass sock.close() server = netrange = netname = registrar = updated = created = expires = status = '' for line in s.splitlines(): line = line.decode('utf8').strip() if not line or ':' not in line: continue if not server and any(line.startswith, self._domain): server = ':'.join(line.split(':')[1:]).strip().lower() # Let's add this check so that we don't respond with info for # a different domain. E.g., doing a whois for microsoft.com # and replying with the info for microsoft.com.wanadoodoo.com if server != domain: server = '' continue if not netrange and any(line.startswith, self._netrange): netrange = ':'.join(line.split(':')[1:]).strip() if not server and not netrange: continue if not registrar and any(line.startswith, self._registrar): registrar = ':'.join(line.split(':')[1:]).strip() elif not netname and any(line.startswith, self._netname): netname = ':'.join(line.split(':')[1:]).strip() elif not updated and any(line.startswith, self._updated): s = ':'.join(line.split(':')[1:]).strip() updated = _('updated %s') % s elif not created and any(line.startswith, self._created): s = ':'.join(line.split(':')[1:]).strip() created = _('registered %s') % s elif not expires and any(line.startswith, self._expires): s = ':'.join(line.split(':')[1:]).strip() expires = _('expires %s') % s elif not status and any(line.startswith, self._status): status = ':'.join(line.split(':')[1:]).strip().lower() if not status: status = 'unknown' try: t = telnetlib.Telnet('whois.pir.org', 43) except socket.error as e: irc.error(str(e)) return t.write(b'registrar ') t.write(registrar.split('(')[0].strip().encode('ascii')) t.write(b'\n') s = t.read_all() url = '' for line in s.splitlines(): line = line.decode('ascii').strip() if not line: continue if line.startswith('Email'): url = _(' <registered at %s>') % line.split('@')[-1] elif line.startswith('Registrar Organization:'): url = _(' <registered by %s>') % line.split(':')[1].strip() elif line == 'Not a valid ID pattern': url = '' if (server or netrange) and status: entity = server or 'Net range %s%s' % \ (netrange, ' (%s)' % netname if netname else '') info = [_f for _f in [status, created, updated, expires] if _f] s = format(_('%s%s is %L.'), entity, url, info) irc.reply(s) else: irc.error(_('I couldn\'t find such a domain.'))
def whois(self, irc, msg, args, domain): """<domain> Returns WHOIS information on the registration of <domain>. """ if utils.net.isIP(domain): whois_server = 'whois.arin.net' usertld = 'ipaddress' elif '.' in domain: usertld = domain.split('.')[-1] whois_server = '%s.whois-servers.net' % usertld else: usertld = None whois_server = 'whois.iana.org' try: sock = utils.net.getSocket(whois_server, vhost=conf.supybot.protocols.irc.vhost(), vhostv6=conf.supybot.protocols.irc.vhostv6(), ) sock.connect((whois_server, 43)) except socket.error as e: irc.error(str(e)) return sock.settimeout(5) if usertld == 'com': sock.send(b'=') elif usertld == 'ipaddress': sock.send(b'n + ') sock.send(domain.encode('ascii')) sock.send(b'\r\n') s = b'' end_time = time.time() + 5 try: while end_time>time.time(): time.sleep(0.1) s += sock.recv(4096) except socket.error: pass sock.close() server = netrange = netname = registrar = updated = created = expires = status = '' for line in s.splitlines(): line = line.decode('utf8').strip() if not line or ':' not in line: continue if not server and any(line.startswith, self._domain): server = ':'.join(line.split(':')[1:]).strip().lower() # Let's add this check so that we don't respond with info for # a different domain. E.g., doing a whois for microsoft.com # and replying with the info for microsoft.com.wanadoodoo.com if server != domain: server = '' continue if not netrange and any(line.startswith, self._netrange): netrange = ':'.join(line.split(':')[1:]).strip() if not server and not netrange: continue if not registrar and any(line.startswith, self._registrar): registrar = ':'.join(line.split(':')[1:]).strip() elif not netname and any(line.startswith, self._netname): netname = ':'.join(line.split(':')[1:]).strip() elif not updated and any(line.startswith, self._updated): s = ':'.join(line.split(':')[1:]).strip() updated = _('updated %s') % s elif not created and any(line.startswith, self._created): s = ':'.join(line.split(':')[1:]).strip() created = _('registered %s') % s elif not expires and any(line.startswith, self._expires): s = ':'.join(line.split(':')[1:]).strip() expires = _('expires %s') % s elif not status and any(line.startswith, self._status): status = ':'.join(line.split(':')[1:]).strip().lower() if not status: status = 'unknown' try: t = telnetlib.Telnet('whois.pir.org', 43) except socket.error as e: irc.error(str(e)) return t.write(b'registrar ') t.write(registrar.split('(')[0].strip().encode('ascii')) t.write(b'\n') s = t.read_all() url = '' for line in s.splitlines(): line = line.decode('ascii').strip() if not line: continue if line.startswith('Email'): url = _(' <registered at %s>') % line.split('@')[-1] elif line.startswith('Registrar Organization:'): url = _(' <registered by %s>') % line.split(':')[1].strip() elif line == 'Not a valid ID pattern': url = '' if (server or netrange) and status: entity = server or 'Net range %s%s' % \ (netrange, ' (%s)' % netname if netname else '') info = filter(None, [status, created, updated, expires]) s = format(_('%s%s is %L.'), entity, url, info) irc.reply(s) else: irc.error(_('I couldn\'t find such a domain.'))
def whois(self, irc, msg, args, domain): """<domain> Returns WHOIS information on the registration of <domain>. """ usertld = domain.split('.')[-1] if '.' not in domain: irc.errorInvalid(_('domain')) return try: sock = utils.net.getSocket('%s.whois-servers.net' % usertld) sock.connect(('%s.whois-servers.net' % usertld, 43)) except socket.error as e: irc.error(str(e)) return sock.settimeout(5) if usertld == 'com': sock.send(b'=') sock.send(domain.encode('ascii')) sock.send(b'\r\n') s = b'' end_time = time.time() + 5 try: while end_time>time.time(): s += sock.recv(4096) except socket.error: pass server = registrar = updated = created = expires = status = '' for line in s.splitlines(): line = line.decode('utf8').strip() if not line or ':' not in line: continue if not server and any(line.startswith, self._domain): server = ':'.join(line.split(':')[1:]).strip().lower() # Let's add this check so that we don't respond with info for # a different domain. E.g., doing a whois for microsoft.com # and replying with the info for microsoft.com.wanadoodoo.com if server != domain: server = '' continue if not server: continue if not registrar and any(line.startswith, self._registrar): registrar = ':'.join(line.split(':')[1:]).strip() elif not updated and any(line.startswith, self._updated): s = ':'.join(line.split(':')[1:]).strip() updated = _('updated %s') % s elif not created and any(line.startswith, self._created): s = ':'.join(line.split(':')[1:]).strip() created = _('registered %s') % s elif not expires and any(line.startswith, self._expires): s = ':'.join(line.split(':')[1:]).strip() expires = _('expires %s') % s elif not status and any(line.startswith, self._status): status = ':'.join(line.split(':')[1:]).strip().lower() if not status: status = 'unknown' try: t = telnetlib.Telnet('whois.pir.org', 43) except socket.error as e: irc.error(str(e)) return t.write(b'registrar ') t.write(registrar.split('(')[0].strip().encode('ascii')) t.write(b'\n') s = t.read_all() url = '' for line in s.splitlines(): line = line.decode('ascii').strip() if not line: continue if line.startswith('Email'): url = _(' <registered at %s>') % line.split('@')[-1] elif line.startswith('Registrar Organization:'): url = _(' <registered by %s>') % line.split(':')[1].strip() elif line == 'Not a valid ID pattern': url = '' if server and status: info = filter(None, [status, created, updated, expires]) s = format(_('%s%s is %L.'), server, url, info) irc.reply(s) else: irc.error(_('I couldn\'t find such a domain.'))
class Internet(callbacks.Plugin): """Add the help for "@help Internet" here.""" threaded = True @internationalizeDocstring def dns(self, irc, msg, args, host): """<host|ip> Returns the ip of <host> or the reverse DNS hostname of <ip>. """ if utils.net.isIP(host): hostname = socket.getfqdn(host) if hostname == host: irc.reply(_('Host not found.')) else: irc.reply(hostname) else: try: ip = socket.getaddrinfo(host, None)[0][4][0] irc.reply(ip) except socket.error: irc.reply(_('Host not found.')) dns = wrap(dns, ['something']) _domain = ['Domain Name', 'Server Name', 'domain'] _registrar = ['Sponsoring Registrar', 'Registrar', 'source'] _updated = [ 'Last Updated On', 'Domain Last Updated Date', 'Updated Date', 'Last Modified', 'changed' ] _created = ['Created On', 'Domain Registration Date', 'Creation Date'] _expires = ['Expiration Date', 'Domain Expiration Date'] _status = ['Status', 'Domain Status', 'status'] @internationalizeDocstring def whois(self, irc, msg, args, domain): """<domain> Returns WHOIS information on the registration of <domain>. """ usertld = domain.split('.')[-1] if '.' not in domain: irc.errorInvalid(_('domain')) return try: sock = utils.net.getSocket('%s.whois-servers.net' % usertld) sock.connect(('%s.whois-servers.net' % usertld, 43)) except socket.error, e: irc.error(str(e)) return sock.settimeout(5) if usertld == 'com': sock.send(b'=') sock.send(domain.encode('ascii')) sock.send(b'\r\n') s = b'' end_time = time.time() + 5 try: while end_time > time.time(): s += sock.recv(4096) except socket.error: pass server = registrar = updated = created = expires = status = '' for line in s.splitlines(): line = line.decode('utf8').strip() if not line or ':' not in line: continue if not server and any(line.startswith, self._domain): server = ':'.join(line.split(':')[1:]).strip().lower() # Let's add this check so that we don't respond with info for # a different domain. E.g., doing a whois for microsoft.com # and replying with the info for microsoft.com.wanadoodoo.com if server != domain: server = '' continue if not server: continue if not registrar and any(line.startswith, self._registrar): registrar = ':'.join(line.split(':')[1:]).strip() elif not updated and any(line.startswith, self._updated): s = ':'.join(line.split(':')[1:]).strip() updated = _('updated %s') % s elif not created and any(line.startswith, self._created): s = ':'.join(line.split(':')[1:]).strip() created = _('registered %s') % s elif not expires and any(line.startswith, self._expires): s = ':'.join(line.split(':')[1:]).strip() expires = _('expires %s') % s elif not status and any(line.startswith, self._status): status = ':'.join(line.split(':')[1:]).strip().lower() if not status: status = 'unknown' try: t = telnetlib.Telnet('whois.pir.org', 43) except socket.error, e: irc.error(str(e)) return