使用python socket 搭建ftp服务器

aloneboy
  • 12

使用python socket搭建ftp服务器的时候,客户端无法识别是ftp协议,虽然可以传输文本但是指令如主被动模式就无法识别。

这是访问正常ftp服务器的包,客户端可以识别是ftp协议

图片描述

下图是我用socket自己搭建的服务器,无法识别出ftp

图片描述

这是我测试用的代码

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    s.bind(('192.168.233.129', 31503))
    s.listen(5) 
    print 'Waiting for connection...'


    clientSock, addr = s.accept()
    print 'Accept new connection from %s:%s...' % addr

    clientSock.send('220-\r\n220 end\r\n'.encode('utf-8')) 
     print clientSock.recv(65536)
     clientSock.send('331 password\r\n'.encode('utf-8'))
     print clientSock.recv(65536)
     clientSock.send('230 login\r\n'.encode('utf-8'))
     print clientSock.recv(65536)
     clientSock.send('215 UnixType\r\n'.encode('utf-8'))
    print clientSock.recv(65536)
    clientSock.send('227 Entering Passive Mode (192,168,233,129,105,160).\r\n'.encode('utf-8'))

结果就是client并不会认为pasv指令是pasv模式,请问如何能让消息被client辨别出是ftp协议的呢

图片描述

回复
阅读 1.9k
1 个回答

wirshark是通过端口号来区别不同协议的,你没有使用标准的FTP 20/21端口,当然就无法识别了。解决办法有两个:

  1. 在你自己写的程序里使用标准的20/21端口。
  2. 在wireshark和ftp客户端里修改ftp协议的端口号为你程序所使用的端口号。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏