我正在编写一个软件,它可以欺骗 Nmap 使其相信 GuildFTPd FTP 服务器正在端口 21 上运行。到目前为止,我的 python 代码如下所示:
import socket
s = socket.socket( )
s.bind(('', 21))
s.listen(1)
conn, addr = s.accept()
conn.send("220-GuildFTPd FTP Server (c) 1997-2002\r\n220-Version 0.999.14")
conn.close()
用于匹配此特定服务的 Nmap 正则表达式是:
match ftp m|^220-GuildFTPd FTP Server \(c\) \d\d\d\d(-\d\d\d\d)?\r\n220-Version (\d[-.\w]+)\r\n| p/Guild ftpd/ v/$2/ o/Windows/
但是,当我使用 Nmap 扫描正在运行脚本的主机时,结果是:
21/tcp open ftp?
怎么会这样?当我使用 Nmap 扫描真实服务时,它会正确识别服务。