Returns None on success, or an error string.
(self)
| 152 | self.__sock = c |
| 153 | |
| 154 | def connect(self) -> Optional[str]: |
| 155 | '''Returns None on success, or an error string.''' |
| 156 | err = None |
| 157 | s = None |
| 158 | try: |
| 159 | for af, addr in self._resolve(): |
| 160 | s = socket.socket(af, socket.SOCK_STREAM) |
| 161 | s.settimeout(self.__timeout) |
| 162 | self.__outputbuffer.d(("Connecting to %s:%d..." % ('[%s]' % addr[0] if Utils.is_ipv6_address(addr[0]) else addr[0], addr[1])), write_now=True) |
| 163 | s.connect(addr) |
| 164 | self.__sock = s |
| 165 | return None |
| 166 | except socket.error as e: |
| 167 | err = e |
| 168 | self._close_socket(s) |
| 169 | if err is None: |
| 170 | errm = 'host {} has no DNS records'.format(self.__host) |
| 171 | else: |
| 172 | errt = (self.__host, self.__port, err) |
| 173 | errm = 'cannot connect to {} port {}: {}'.format(*errt) |
| 174 | return '[exception] {}'.format(errm) |
| 175 | |
| 176 | def get_banner(self, sshv: int = 2) -> Tuple[Optional['Banner'], List[str], Optional[str]]: |
| 177 | self.__outputbuffer.d('Getting banner...', write_now=True) |