2

如果这是正确的部分,则不是 100%,但我认为是这样,因为这是一个关于如何编程的问题。

在学习了计算机网络课程之后,我有了一些我想尝试的东西的想法。其中之一是自动登录到本地托管在我们的“路由器”上的网页。

所以该站点是本地的,比如说 192.168.150.1 - 单击“免费登录”链接会使用一个伪帐户登录您,我们将其称为 Alice(我们的 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 并不重要,除非其中一些有更好的库 ..)为我建立这个安全连接,所以我可以将该 GET 信息设置为路由器并登录?或者在代码中有更简单的方法来做到这一点?我可以让程序“访问”192.168.150.1 并将数据包创建和 SSL 留给内核吗?(--> 即使我认为 SSL 必须由应用程序本身处理..)

欢迎 Windows 和 unix 解决方案/指导。我想为两者做这个。

抱歉,如果这“令人困惑”,我试图尽可能清楚地提出问题:p - 所以我希望在将 GET 信息发送到路由器方面得到一些帮助,就好像我手动访问了该页面并单击了链接一样.

4

2 回答 2

3

如果您真的想自己处理 HTTP 编程(发送 GET 命令等),也许是出于学习目的,但有一些东西会为您处理 SSL/TLS,您可以使用类似于stunnel该服务器的东西,并使用您的自己的应用程序连接隧道的本地端。

通常,更好的选择是使用也支持 SSL/TLS 的 HTTP 库。Libcurl 就是一个很好的例子。

于 2012-12-19T14:27:53.233 回答
1

当然有可能,您只需要实现以下序列:

  1. 创建到 HTTPS 服务器的 SSL 连接
  2. 发送 HTTP GET 请求
  3. 读取服务器的响应
  4. 解析 HTTP 响应中的 HTML 内容

有很多使用 openssl 从服务器请求 HTTP 页面的示例,我通过在 Google 上搜索“openssl https 示例”找到了这个。在我看来,真正的挑战是解析已经在stackoverflow上讨论过的 HTML 内容。

我建议你在用 C++ 实现它之前使用 Python 尝试这个,祝你好运!

于 2012-12-19T14:31:37.660 回答