假设我有一台机器,IP地址是
这是否意味着在我的情况下,我应该添加前缀
或者,由于我的计算机专门用于此任务,我确定我的计算机上没有其他人会接收到发送到端口443的任何消息。因此,根据同样的文档,我也可以使用通配符:
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);
};
https://*8080
(以及其他端口)可以工作,但我无法测试所警告的漏洞。因此,我不确定使用此前缀是否安全。 - Harald Coppoolse