鍍金池/ 問答/Python  Linux  網(wǎng)絡(luò)安全/ 使用python socket 搭建ftp服務(wù)器

使用python socket 搭建ftp服務(wù)器

使用python socket搭建ftp服務(wù)器的時(shí)候,客戶端無法識(shí)別是ftp協(xié)議,雖然可以傳輸文本但是指令如主被動(dòng)模式就無法識(shí)別。

這是訪問正常ftp服務(wù)器的包,客戶端可以識(shí)別是ftp協(xié)議

圖片描述

下圖是我用socket自己搭建的服務(wù)器,無法識(shí)別出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'))

結(jié)果就是client并不會(huì)認(rèn)為pasv指令是pasv模式,請(qǐng)問如何能讓消息被client辨別出是ftp協(xié)議的呢

圖片描述

回答
編輯回答
瘋浪

wirshark是通過端口號(hào)來區(qū)別不同協(xié)議的,你沒有使用標(biāo)準(zhǔn)的FTP 20/21端口,當(dāng)然就無法識(shí)別了。解決辦法有兩個(gè):

  1. 在你自己寫的程序里使用標(biāo)準(zhǔn)的20/21端口。
  2. 在wireshark和ftp客戶端里修改ftp協(xié)議的端口號(hào)為你程序所使用的端口號(hào)。
2018年3月4日 19:42