2012-12-19 34 views
2

如果這是正確的部分,則不是100%,但我認爲是這樣,因爲這是一個關於如何編程的問題。設置SSL連接併發送GET信息

在學習計算機網絡課程後,我得到了一些我想嘗試的東西的想法。 其中之一是自動登錄到本地託管在我們的「路由器」上的網頁。

因此,該網站是本地的,讓我們說在192.168.150.1 - 點擊「免費登錄」鏈接登錄一個僞帳戶,我們將調用愛麗絲(我們有IP地址192.168.150.74 ..所以如果你點擊鏈接,你會發送一個GET請求,如:

192.168.0.1/login?dst=&username=T-Alice 

現在我使用Wireshark來檢查數據包流,它的加密 - 這是包流:

No.  Time  Source    Destination   Protocol Info 
     1 0.000000 192.168.150.74  192.168.150.1   TCP  50704 > https [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSV=37133 TSER=0 WS=7 
     2 0.001304 192.168.150.1   192.168.150.74  TCP  https > 50704 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSV=17344316 TSER=37133 WS=1 
     3 0.001372 192.168.150.74  192.168.150.1   TCP  50704 > https [ACK] Seq=1 Ack=1 Win=14720 Len=0 TSV=37133 TSER=17344316 
     4 0.001969 192.168.150.74  192.168.150.1   TLSv1 Client Hello 
     5 0.003568 192.168.150.1   192.168.150.74  TCP  https > 50704 [ACK] Seq=1 Ack=406 Win=6864 Len=0 TSV=17344316 TSER=37133 
     6 0.010537 192.168.150.1   192.168.150.74  TLSv1 Server Hello, Certificate, Server Hello Done 
     7 0.010587 192.168.150.74  192.168.150.1   TCP  50704 > https [ACK] Seq=406 Ack=1132 Win=16896 Len=0 TSV=37134 TSER=17344316 
     8 0.013352 192.168.150.74  192.168.150.1   TLSv1 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 
     9 0.051304 192.168.150.1   192.168.150.74  TCP  https > 50704 [ACK] Seq=1132 Ack=732 Win=7936 Len=0 TSV=17344321 TSER=37134 
    10 0.269299 192.168.150.1   192.168.150.74  TLSv1 Change Cipher Spec, Encrypted Handshake Message 
    11 0.270405 192.168.150.74  192.168.150.1   TLSv1 Application Data 
    12 0.271888 192.168.150.1   192.168.150.74  TCP  https > 50704 [ACK] Seq=1191 Ack=1377 Win=9226 Len=0 TSV=17344343 TSER=37160 
    13 0.288841 192.168.150.1   192.168.150.74  TLSv1 Application Data, Application Data 
    14 0.328065 192.168.150.74  192.168.150.1   TCP  50704 > https [ACK] Seq=1377 Ack=2625 Win=19840 Len=0 TSV=37166 TSER=17344344 

現在什麼我想問(做..)是:

是否有可能創建一個程序(最好在C或C++中,但lang並不重要,除非其中一些具有更好的lib ..),它爲我設置了這個安全連接,所以我可以設置GET信息到路由器並登錄?或者在代碼中有更簡單的方法來做到這一點?我可以讓程序「訪問」192.168.150.1,並將數據包創建和SSL留給內核? ( - >即使我認爲SSL必須由應用程序本身處理..)

Windows和unix解決方案/指導都歡迎..我想這兩個。

對不起,如果這個'混亂',我試圖問清楚,儘可能:p - 所以我只是想幫助發送GET信息到路由器,就好像我手動訪問頁面並點擊鏈接。

回答

1

當然,這是可能的,你只需要執行下面的順序:

  1. 創建SSL連接到HTTPS服務器
  2. 發送HTTP GET請求
  3. 從服務器讀取
  4. 響應
  5. 解析HTTP響應中的HTML內容

有很多示例請求HTTP頁面從服務器使用openssl,我發現這個one在谷歌上搜索'openssl https example'。我認爲真正的挑戰是解析已在stackoverflow上討論過的HTML內容。

我建議您在使用C++實現它之前嘗試使用Python,祝你好運!

+0

爲什麼建議先在python中嘗試它? (雖然你提供的教程是一個C++的例子^^ – Spyral

+0

這個問題被標記爲C++,所以我提供的支持文檔將反映出這一點.Python是一個優秀的原型語言,我使用它始終在提交之前測試概念和算法更寬容(更高效)的C++環境 –

3

如果你真的要處理的HTTP編程(發送GET命令等)自己,也許是出於學習的目的,但有一些照顧的SSL/TLS適合你,你可以使用類似stunnel到服務器,並使用自己的應用程序連接隧道的本地端。

通常,更好的選擇是使用也支持SSL/TLS的HTTP庫。 Libcurl就是一個很好的例子。

+0

對於'libcurl' +1。 'libcurl'網站上有很多很好的例子 - http://curl.haxx.se/libcurl/c/example。html – qrdl