【发布时间】:2013-05-14 03:41:38
【问题描述】:
我最近编写了一个小脚本来获取本地网络中的 ssh 服务器列表,因为我不知道我的计算机的 ip 地址,而无需将它们连接到屏幕并进行查找(这将消除对 ssh 的需要)。因为我有多个 ssh 服务器,所以我想知道哪个 ip 地址属于一台计算机。为此,我想使用 ssh 横幅来识别计算机。由于使用 ssh 库来获得横幅和学习体验有点过头,我想使用套接字来实现它。
Atm 我在 python 中有这个:
from socket import socket
s = socket()
s.connect((ip,22))
s.send(s.recv(100)) # send the ssh version back
直到这里它起作用,并且从套接字读取会给出支持的加密算法列表。我应该发回一份算法列表和我的mac地址(我还没有成功)。我尝试发送从服务器获得的列表,但之后我没有得到任何响应。
根据文档,服务器可以随时发送横幅。当我使用普通的 ssh 客户端时,它会在我登录之前显示横幅,所以我认为我不需要经历整个身份验证过程。
使用套接字获取 ssh 横幅的最简单方法是什么?
(代码不必在python中)
【问题讨论】:
-
也许我没有正确理解你的问题,但为什么不直接使用
nmap之类的呢? -
我不会从使用
nmap中学到任何东西,并且输出包含更多我不需要的数据,并且标志更复杂。而且 afaik nmap 不显示 ssh 横幅。 -
为什么使用 ssh 库看起来有点矫枉过正?在我看来,这将是最好和最正确的方法。顺便说一句,我建议您通过 SSH 密钥指纹来唯一标识计算机,而不是通过它们的横幅。大多数 SSH 服务器没有配置特别独特的横幅——许多根本没有。如果您将 SSH 密钥指纹与 DNS SSHFP 记录相匹配,则您可以在 DNS 中维护这些记录以作为文档。