2011-12-26 3 views
1

私はGuildFTPd FTPサーバーがポート21上で実行されている私のPythonコードはこれまでのところ、このようになっていることを信じるようにNmapのをだますことができるソフトウェアの一部を書いていますが偽造:は、FTPサービス

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の正規表現についてこの特定のサービスをマッチングすることである:私は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/ 

しかし結果は以下のとおりです。

21/tcp open ftp? 

これはどのようにすることができますか? Nmapで実際のサービスをスキャンすると、サービスが正しく識別されます。

+0

:ここ

は、Nmapのを欺くために十分である、シーケンシャル接続を処理(しかし平行でない)ことができ、あなたのスクリプトの非常に基本的な適応です。 nmapに応答を与えて、そのポートにプログラム*があることを知らせます。しかし、コマンドセットが正しくないので、実際にはftpサーバーかどうかはわかりません。 –

+0

私はWiresharkを使って実際のアプリケーションを盗聴しました。私はまだ困惑しているので、余分な情報を送るようには思われません。 –

+0

誰にも分かりませんか? –

答えて

1

最初に、マッチラインに必要な偽の応答の最後に\r\nがありません。

もう1つの大きな問題は、プログラムが1つの接続のみを処理し、次に閉じることです。 Nmapはまずポートスキャンを行い、次にサービス指紋プローブを送信します。 nmapをroot(またはWindowsのAdministrator)として実行した場合は、半開きのTCP SYNスキャンが使用され、アプリケーションはportscanを接続とし​​て認識しませんが、portscanを受け入れ、接続を閉じ、サービススキャンフェーズでは使用できません。私の推測では、FTPプロトコルによりがあることだろう

import socket 

s = socket.socket() 
s.bind(('', 21)) 
s.listen(1) 
while True: 
    conn, addr = s.accept() 
    conn.send("220-GuildFTPd FTP Server (c) 1997-2002\r\n220-Version 0.999.14\r\n") 
    conn.close() 
関連する問題