def __init__(self, app): '''The Base User is initiated with the app objects, the socket setup and some general options.''' self.app = app self.state = self.reg_state = None self.register = None self.reg_result = self.reg_reason = None # socket setup if rfc2396_IPv6.isIPv6(app.options.to.uri.host): # Unstable print bcolors.FAIL + "ALERT! You are using IPv6 unstable/not tested feature." + bcolors.ENDC if app.options.int_ip == '0.0.0.0': app.options.int_ip = '::1' sock = socket.socket( socket.AF_INET6, socket.SOCK_DGRAM if app.options.transport == self.UDP else socket.SOCK_STREAM) else: sock = socket.socket(type=socket.SOCK_DGRAM if app.options. transport == self.UDP else socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind( (app.options.int_ip, (app.options.port + 1) if app.options.transport == self.TLS else app.options.port)) self.sock = sock # socket options self.max_size = app.options.max_size self.interval = app.options.interval # REGISTER options self.register_interval = app.options.register_interval self.reg_refresh = app.options.reg_refresh # SIP options self.username = app.options.username self.reg_username = app.options.reg_username self.password = app.options.password self.registrarAddr = rfc2396_IPv6.Address( str('<sip:' + self.reg_username + '@' + (app.options.registrar_ip if rfc2396_IPv6. isIPv4(app.options.registrar_ip) else ('[' + app.options.registrar_ip + ']')) + '>')) # Generators self._listenerGen = self._registerGen = None # create a SIP stack instance self.transport = rfc3261_IPv6.TransportInfo( self.sock, secure=(app.options.transport == self.TLS)) self._stack = rfc3261_IPv6.Stack(self, self.transport, fix_nat=None) # create a SIP stack instance self.localParty = app.options.fromAddr.dup() self.remoteParty = app.options.to.dup() self.remoteTarget = app.options.to.dup() # create a SIP user agent instance self._ua = None
def __init__(self, app): '''The Base User is initiated with the app objects, the socket setup and some general options.''' self.app = app self.state = self.reg_state = None self.register = None self.reg_result = self.reg_reason = None # socket setup if rfc2396_IPv6.isIPv6(app.options.to.uri.host): # Unstable print bcolors.FAIL+"ALERT! You are using IPv6 unstable/not tested feature."+bcolors.ENDC if app.options.int_ip == '0.0.0.0': app.options.int_ip= '::1' sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM if app.options.transport == self.UDP else socket.SOCK_STREAM) else: sock = socket.socket(type=socket.SOCK_DGRAM if app.options.transport == self.UDP else socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((app.options.int_ip, (app.options.port+1) if app.options.transport == self.TLS else app.options.port)) self.sock = sock # socket options self.max_size = app.options.max_size self.interval = app.options.interval # REGISTER options self.register_interval = app.options.register_interval self.reg_refresh = app.options.reg_refresh # SIP options self.username = app.options.username self.reg_username = app.options.reg_username self.password = app.options.password self.registrarAddr = rfc2396_IPv6.Address(str('<sip:'+self.reg_username+'@'+(app.options.registrar_ip if rfc2396_IPv6.isIPv4(app.options.registrar_ip) else ('['+app.options.registrar_ip+']'))+'>')) # Generators self._listenerGen = self._registerGen = None # create a SIP stack instance self.transport = rfc3261_IPv6.TransportInfo(self.sock, secure=(app.options.transport == self.TLS)) self._stack = rfc3261_IPv6.Stack(self, self.transport, fix_nat=None) # create a SIP stack instance self.localParty = app.options.fromAddr.dup() self.remoteParty = app.options.to.dup() self.remoteTarget = app.options.to.dup() # create a SIP user agent instance self._ua = None
def _send(self, data, addr): # generator version if self._snifferGen: # Reconfig socket needed because of scapy ------------------- if rfc2396_IPv6.isIPv6(self.remoteTarget): # Unstable if self.app.options.int_ip == '0.0.0.0': self.app.options.int_ip= '::1' sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM if self.app.options.transport == self.UDP else socket.SOCK_STREAM) else: sock = socket.socket(type=socket.SOCK_DGRAM if self.app.options.transport == self.UDP else socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((self.app.options.int_ip, (self.app.options.port+1) if self.app.options.transport == self.TLS else self.app.options.port)) self.sock = sock #------------------------------------------------------------ try: logger.debug('sending[%d] to %s\n%s'%(len(data), addr, data)) if self.sock: if self.sock.type == socket.SOCK_STREAM: try: remote = self.sock.getpeername() if remote != addr: logger.debug('connected to wrong addr', remote, 'but sending to', addr) except socket.error: # not connected, try connecting try: self.sock.connect(addr) except socket.error: logger.debug('failed to connect to', addr) try: yield self.sock.send(data) except socket.error: logger.debug('socket error in send') elif self.sock.type == socket.SOCK_DGRAM: try: yield self.sock.sendto(data, addr) except socket.error: logger.debug('socket error in sendto' ) else: logger.debug('invalid socket type', self.sock.type) except AttributeError: pass