| 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) |
| 178 | |
| 179 | if self.__sock is None: |
| 180 | return self.__banner, self.__header, 'not connected' |
| 181 | if self.__banner is not None: |
| 182 | return self.__banner, self.__header, None |
| 183 | |
| 184 | banner = SSH_HEADER.format('1.5' if sshv == 1 else '2.0') |
| 185 | if self.__state < self.SM_BANNER_SENT: |
| 186 | self.send_banner(banner) |
| 187 | |
| 188 | s = 0 |
| 189 | e = None |
| 190 | while s >= 0: |
| 191 | s, e = self.recv() |
| 192 | if s < 0: |
| 193 | continue |
| 194 | while self.unread_len > 0: |
| 195 | line = self.read_line() |
| 196 | if len(line.strip()) == 0: |
| 197 | continue |
| 198 | self.__banner = Banner.parse(line) |
| 199 | if self.__banner is not None: |
| 200 | return self.__banner, self.__header, None |
| 201 | self.__header.append(line) |
| 202 | |
| 203 | return self.__banner, self.__header, e |
| 204 | |
| 205 | def recv(self, size: int = 2048) -> Tuple[int, Optional[str]]: |
| 206 | if self.__sock is None: |