Spawn a DCE/RPC server :param transport: one of DCERPC_Transport :param iface: the interface to spawn it on (default: conf.iface) :param port: the port to spawn it on (for IP_TCP or the SMB server) :param bg: background mode? (default: False) :param
(cls, transport, iface=None, port=135, bg=False, **kwargs)
| 128 | |
| 129 | @classmethod |
| 130 | def spawn(cls, transport, iface=None, port=135, bg=False, **kwargs): |
| 131 | """ |
| 132 | Spawn a DCE/RPC server |
| 133 | |
| 134 | :param transport: one of DCERPC_Transport |
| 135 | :param iface: the interface to spawn it on (default: conf.iface) |
| 136 | :param port: the port to spawn it on (for IP_TCP or the SMB server) |
| 137 | :param bg: background mode? (default: False) |
| 138 | :param ndr64: whether NDR64 is supported or not (default: conf.ndr64). |
| 139 | This attribute will be overwritten if the client doesn't support it. |
| 140 | """ |
| 141 | if transport == DCERPC_Transport.NCACN_IP_TCP: |
| 142 | # IP/TCP case |
| 143 | ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| 144 | local_ip = get_if_addr(iface or conf.iface) |
| 145 | try: |
| 146 | ssock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
| 147 | except OSError: |
| 148 | pass |
| 149 | ssock.bind((local_ip, port)) |
| 150 | ssock.listen(5) |
| 151 | sockets = [] |
| 152 | if kwargs.get("verb", True): |
| 153 | print( |
| 154 | conf.color_theme.green( |
| 155 | "Server %s started. Waiting..." % cls.__name__ |
| 156 | ) |
| 157 | ) |
| 158 | |
| 159 | def _run(): |
| 160 | # Wait for clients forever |
| 161 | try: |
| 162 | while True: |
| 163 | clientsocket, address = ssock.accept() |
| 164 | sockets.append(clientsocket) |
| 165 | print( |
| 166 | conf.color_theme.gold( |
| 167 | "\u2503 Connection received from %s" % repr(address) |
| 168 | ) |
| 169 | ) |
| 170 | server = cls( |
| 171 | DCERPC_Transport.NCACN_IP_TCP, |
| 172 | local_ip=local_ip, |
| 173 | port=port, |
| 174 | **kwargs, |
| 175 | ) |
| 176 | threading.Thread( |
| 177 | target=server.loop, args=(clientsocket,) |
| 178 | ).start() |
| 179 | except KeyboardInterrupt: |
| 180 | print("X Exiting.") |
| 181 | ssock.shutdown(socket.SHUT_RDWR) |
| 182 | except OSError: |
| 183 | print("X Server closed.") |
| 184 | finally: |
| 185 | for sock in sockets: |
| 186 | try: |
| 187 | sock.shutdown(socket.SHUT_RDWR) |
no test coverage detected