【问题标题】:Identifying services listening on remote ports识别侦听远程端口的服务
【发布时间】:2013-11-23 13:36:01
【问题描述】:

我想详细说明一下this question,尤其是this answer。假设我有一个固定的服务列表要检查,比如:('ftp', 'ssh', 'http')。为远程服务器的 22 端口打开一个套接字:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(('my_remote_server', 22))

if(result == 0) :
    print s.recv(256)
s.close()

我得到以下输出:

'SSH-2.0-OpenSSH_6.1p1 Debian-4\r\n'

所以我猜想有一个 ssh 服务正在侦听该端口。因此,我的问题是:在哪里或如何找到不同类型服务的欢迎消息(或类似消息)?这些是否以某种方式受到监管?在ssh的情况下,是不是总是以SSH-开头?

【问题讨论】:

    标签: python networking service port


    【解决方案1】:

    您从服务器获得的响应取决于确切的协议和服务器配置。

    例如,HTTP 有一个 Server 标头,但互联网上的许多服务器关于服务器响应的内容,以摆脱试图利用服务器特定缺陷的恶意黑客。此外,在客户端发送请求之前,服务器会保持沉默;你的代码必须在有任何响应之前发送一些东西。

    你能做的最好的就是尝试不同的协议,看看对方是否做出明智的反应。例如,尝试向 HTTP 端口发送 SSH 握手可能会导致 HTTP/1.0 400 Bad Request 响应。

    换句话说,没有现成的解决方案,您必须根据要检测的协议创建自己的启发式方法。

    【讨论】:

    • 好的,我想我必须计划我将支持哪些服务,然后测试启发式方法以检测这些服务。
    【解决方案2】:

    你能做的最好的可能是搜索字符串 ssh(/ftp/http) 并以此为基础得出结论。 当然,即使这也是一种猜测,因为这通常可以通过配置参数进行更改(参见here),并且将其更改为不暴露服务器程序/版本被认为是良好的安全实践。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-03
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      相关资源
      最近更新 更多