我在寫我自己的娛樂這是假設能夠做的4件事小FTP項目:libssh2通道SSL BIO使用
- 直接連接到FTP
- 直接連接到一個ftp使用SSL(封裝)
- 通過ssh隧道連接到ftp
- 通過ssh隧道通過SSL連接到ftp。
我在純C寫程序(UNIX,而不是它在這種情況下重要的),使用標準庫1和2中,除了OpenSSL,以便進行2和4
使用libssh2 3和4我能夠拿到1-3的工作,而不是4.下面是我在哪裏:
- 打開一個套接字服務器來完成的:端口,連接,寫入/從套接字讀取。
- 通過打開一個套接字到主機:端口,連接,寫入「AUTH SSL」,從先前的套接字啓動一個具有BIO的SSL對象 - SSL_connect(),SSL_read(),SSL_write()。
- 打開目標本地主機和之間的隧道(做雖然我不知道我使用本地主機綁定的東西在我的approac :)
類似:
test_ssh_channel = libssh2_channel_direct_tcpip_ex(test_ssh_session, "100.100.100.100", 21, "127.0.0.1", 21);
我然後寫入/讀取到該通道(libssh2_channel_read()) - 我發現它提供了以下流程: 純文本 - >通過ssh發送 - >將純文本從ssh主機發送到目標。 爲了3的目的,這很好,並完成這項工作。
現在,爲4.我卡住了,因爲我(試圖保持簡單)需要以某種方式將此通道轉換爲套接字。所以我看到它的方式有兩種選擇:
- a。做一個僞插座,每 時間我需要讀/寫,我 讀取通道/寫, 發送/檢索它插入插座, 讓所以SSL_connect(pseudo_socket) 與我的假插座每一次溝通, 接受ssl_write發送的內容,發送到 通道,反之亦然。
或
- 灣建立一個BIO緩衝區(有 更多的生物功能比我可以 包裹我的頭; 文檔還沒有完全 有幫助),並以某種方式讀取/寫入 。
理想我會去2,出於這個原因:由於我的項目是用C語言編寫,維護套接字讀/寫在執行其他代碼將變得更復雜一點比我更喜歡。
然而,b。給出了一個問題:我很擔心握手是如何工作的;特別是我擔心我最終會與localhost而不是遠程主機握手。
總結我的問題:我可以通過通道讀取/寫入SSL(放置一個包裝器),以便4.的流程變爲:純文本 - > SSL(純文本) - >通過ssh - >從SSL主機提供SSL(明文)到目標主機?
這有點長,但我希望這是可以理解的。如果沒有,請讓我知道,我會清理。從谷歌搜索/搜索stackoverflow它似乎是我和一個與MySQL工作的人有這個相同的問題,並有限的答案。
任何輸入是非常感謝!
- 詹姆斯