【发布时间】:2019-04-11 14:55:39
【问题描述】:
假设我有一台 IP 为 183.41.22.22 的机器。我想收听将发送到本地主机上此 IP 的端口 43 的所有 HTTP 消息。其实我对发送到这个端口的所有消息都不是很感兴趣,只对发送到https://183.41.22.22:443/CustomerData/的消息感兴趣
class HttpListener 的文档说我应该添加一个前缀。他们举了一个例子:http://www.contoso.com:8080/customerData/。
这是否意味着在我的情况下我应该添加前缀https://183.41.22.22:443/CustomerData/?还是我应该使用https://localhost:443/CustomerData/?
另外,由于我的计算机专门用于此任务,我确信我计算机上的任何其他人都不应该收到任何发送到端口 443 的消息。因此,根据相同的文档,我也可以使用通配符: http://*:443
但是,文档警告:
不应使用顶级通配符绑定(http://*:80/ 和 http://+:80)。顶级通配符绑定会产生应用程序安全漏洞。这适用于强通配符和弱通配符。使用明确的主机名或 IP 地址而不是通配符。
什么是显式主机名?是CustomerData的部分吗?
对于那些感兴趣的人,代码的简化部分(没有适当的可能结束程序)
using (var httpListener = new HttpListener())
{
httpListener.Prefixes.Add("https://*:443/");
httpListener.Start();
while (true)
{
var context = httpListener.GetContext();
var httpRequest = context.Request();
// fill the response
string responseText = this.CreateResponseText(httpRequest);
byte[] buf = Encoding.UTF8.GetBytes(responseText);
context.Response.ContentLength64 = buf.Length;
context.Response.OutputStream.Write(buf, 0, buf.Length);
};
【问题讨论】:
-
您可以从 cmd.exe 执行 ping 以查看 localhost 设置为 >Ping localhost
-
“我应该使用localhost:443/CustomerData”你试过了吗?发生了什么?
-
虽然前缀
https://*8080(和其他端口)有效,但我无法测试警告的漏洞。所以我不确定使用这个前缀是否安全
标签: c# httplistener