def addService(self, server, type, name): discovery_logger.info("Service %s added", repr(name)) # Request more information about the service info = server.getServiceInfo(type, name) if info and info.address is not None: host = socket.inet_ntoa(info.address) try: port = int(info.port) except: discovery_logger.exception( "Invalid Service (port not an int): " "%r" % info.__dict__) return addr = (host, port) ip = get_host_ip() if addr == (ip, self.port): # talking to self return # old #infohash = name.split("_BitTorrent-")[1][:-len("._tcp.local.")] peerid, infohash, service_type = name.split('.', 2) infohash = infohash[1:] # _ discovery_logger.info("Got peer: %s:%d %s", host, port, infohash) # BUG: BitTorrent is so broken! #t = random.random() * 3 # But I fixed it. t = 0 self.rawserver.external_add_task(t, self._got_peer, addr, infohash)
def addService(self, server, type, name): discovery_logger.info("Service %s added", repr(name)) # Request more information about the service info = server.getServiceInfo(type, name) if info and info.address is not None: host = socket.inet_ntoa(info.address) try: port = int(info.port) except: discovery_logger.exception("Invalid Service (port not an int): " "%r" % info.__dict__) return addr = (host, port) ip = get_host_ip() if addr == (ip, self.port): # talking to self return infohash = name.split("_BitTorrent-")[1][:-len("._tcp.local.")] discovery_logger.info("Got peer: %s:%d %s", host, port, infohash) # BUG: BitTorrent is so broken! t = random.random() * 3 self.rawserver.external_add_task(t, self._got_peer, addr, infohash)
def traceroute(self, dst, timeout, report=None): """If report is None then this returns the route as a list of IP addresses. If report is not None then this calls report as each node is discovered in the path (e.g., if there are 6 hops in the path then report gets called 6 times).""" if debug: print "Tracing route to [%s]" % dst i = win32icmp.IcmpCreateFile() o = win32icmp.Options() route = None if report == None: route = [] def add_node(node): route.append(node) report = add_node for ttl in xrange(64): o.Ttl = ttl try: if ttl == 0: addr = get_host_ip() status = -1 rtt = 0 else: addr, status, rtt = win32icmp.IcmpSendEcho( i, dst, None, o, timeout) if debug: print "ttl", ttl, "\t", rtt, "ms\t", addr report(addr) if status == win32icmp.IP_SUCCESS: if debug: print "Traceroute complete in", ttl, "hops" break except Exception, e: report('*') if debug: print "Hop", ttl, "failed:", str_exc(e) if self.abort_traceroute.isSet(): break
def traceroute(self, dst, timeout, report=None): """If report is None then this returns the route as a list of IP addresses. If report is not None then this calls report as each node is discovered in the path (e.g., if there are 6 hops in the path then report gets called 6 times).""" if debug: print "Tracing route to [%s]" % dst i = win32icmp.IcmpCreateFile() o = win32icmp.Options() route = None if report == None: route = [] def add_node(node): route.append(node) report = add_node for ttl in xrange(64): o.Ttl = ttl try: if ttl == 0: addr = get_host_ip() status = -1 rtt = 0 else: addr, status, rtt = win32icmp.IcmpSendEcho(i, dst, None, o, timeout) if debug: print "ttl", ttl, "\t", rtt, "ms\t", addr report(addr) if status == win32icmp.IP_SUCCESS: if debug: print "Traceroute complete in", ttl, "hops" break except Exception, e: report('*') if debug: print "Hop", ttl, "failed:", str_exc(e) if self.abort_traceroute.isSet(): break
def populate_host(self): # throw out '' or None or ints, also look for semi-valid IPs if not isinstance(self.host, str) or self.host.count('.') < 3: self.host = get_host_ip()