- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我有一台带有 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
但是,文档警告:
Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Top-level wildcard bindings create app security vulnerabilities. This applies to both strong and weak wildcards. Use explicit host names or IP addresses rather than wildcards.
什么是显式主机名?它是 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);
};
最佳答案
What is an explicit host name? Is it the part CustomerData?
主机名就是通常所说的“域”。参见 The components of a URL .警告还包含更多信息(您可能为简洁起见而遗漏了这些信息,但它包含重要信息):
Subdomain wildcard binding (for example,
*.mysub.com
) doesn't have this security risk if you control the entire parent domain (as opposed to*.com
, which is vulnerable). See rfc7230 section-5.4 for more information.
RFC 部分指的是 HTTP Host header .这是 HTTP/1.1 规范的一部分,是在人们开始使用时引入的 running more than 1 website on a host回到网络的早期。一台主机(一台“机器”)过去只是简单地监听(通常)端口 80 并提供客户端请求的页面。但是,当网络开始变得越来越广泛使用时,就出现了在一台机器上“托管”多个网站的需求。您可以使用 DNS 将 foo.com
和 bar.com
都指向同一个 IP,但是机器将不知道是否发送 foo .com
主页或 bar.com
的主页。于是引入了Host头;然后,网络浏览器(更准确地说:http 客户端)可以让服务器知道他们对哪个主机感兴趣,并可以提供正确的页面。
请注意,域的每一部分(例如 sub.domain.foo.co.uk
)可能指的是不同的主机(但它们也可能,就像好吧,都指向同一个主机)。使用top-level domain通配符(例如 *.com
,甚至更糟:*
)是一个潜在的风险,因为任何人都可以获得 .com
域 (myevildomain.com
) 并将其指向您的服务器。如果您使用 *.company.com
,除了 company.com
之外,没有人可以控制子域。 为什么这是一个安全风险是另一回事,但其要点是使用通配符 *.com
将使您的应用程序响应任何 host
header 以 .com
结尾,而 *.company.com
将阻止您的应用程序响应(可能被欺骗的)客户端请求 myevildomain.com
.
关于c# - HttpListener:监听具有显式主机名的端口(无顶级通配符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55635533/
我一直在 Windows 服务应用程序中放置一个小型嵌入式 HTTP 服务器,用于监听来自网络上使用 HTTP 的其他设备的更新。 对于每个 HTTP 请求,处理请求/响应的代码会执行两次,我希望它只
我正在开发一个迄今为止使用 HttpListener 来提供小型独立 http 服务器的应用程序。但是,我最近发现 HttpListener 需要以管理员身份运行,这并不总是可行的。 最好的选择是什么
我正在开发一个具有 HttpListener 的应用程序。我的目标是让用户根据自己的选择关闭和打开监听器。我将 Listener 放在一个新线程中,但在中止该线程时遇到问题。我在某处读到,如果您尝试中
我创建了简单的 HttpListener 来监听端口 9090 并根据请求的 URL 将一些信息写入控制台。 但我卡住了 :( 我想到了多线程、基于事件的系统,但我没有设法用它做任何事情。 这是我作为
我正在编写一个控制台应用程序作为 httplistener 并通过 jquery 使用它,它的工作完全正确,但我想将其转换为 https,但我不知道步骤 这是我的代码希望大家能尽快解决 这是在 JSc
我的 c# httplistener 仅在我在本地网络中发送请求时捕获请求(来自使用本地 ip 的同一 wifi 上的机器)。 当我查看我的公共(public) ip(在 google 中使用“我的
我正在制作一个简单的网络服务器来提供 html、css、js 和图像(在 c# 中完成)。我正在使用 HttpListener,我可以让 html、javascript 和 css 文件正常工作。我只
我尝试在不使用 IIS 的情况下设置 Web 服务。 我知道我们可以使用 HttpListener 来创建简单的 http 服务器。我想知道它现在是否已被弃用,因为 WCF 似乎提供了更多高级功能。
我有一个应该监听 HTTP 请求的 Windows 服务。为此,我正在使用 HttpListener。该服务已成功完成其工作。但是,当服务设置为在系统启动时自动启动时,我的 HTTP 初始化有延迟。
我有一个基于 HttpListener 的小型本地 Web 服务器。服务器提供文件给本地客户端应用程序解包并写入文件到 response.OutputStream; 但有时文件(视频)很大,我不认为总
我正在通过尝试获取一个打开的随机端口(或一个不在 IpGlobalProperties.GetActiveTcpConnections() 中的端口)来创建一个 HttpListener。我遇到的问题
我正在开发一个广泛使用 HttpListener() 的应用程序。到目前为止,我一直在实际网络上进行所有测试,但我现在对此感到厌烦。 我用正确的端口尝试了通常的嫌疑人(本地主机,127.0.0.1),
我正在使用这段代码来实现 Http 服务器: public Server() { _httpListener = new HttpListener(); _ht
我必须实现一个小型 REST 服务器来管理远程数据库,没什么特别的。安全性不是关键问题,因为此服务器必须在 Intranet 环境中运行;我们只想过滤用户并将他们重定向到适当的资源。
我有几个 HttpListener 服务在同一台机器上使用不同的 URI(同一端口)。有没有办法让一个进程检测哪些其他服务正在运行并在同一台机器上注册为 HttpListeners?他们都共享这样的公
我正在编写一个类似于 HFS 的应用程序,它是一个 HTTP 文件服务器,在 HTML/CSS/JS 中具有自定义主题,我我希望能够在多个部分提供我的文件,因为大多数下载管理器通过多个连接连接到服务器
好吧,这是一个很长的问题,但我认为这是值得的。我们拥有的: 一个示例虚拟 C# 控制台应用程序,启动自托管的 owin ASP.Net WebAPI 服务(Microsoft.AspNet.Web
我必须建立一个 HttpListener 来等待客户端服务器发出的请求。我必须在端口 8088 上接收该请求并提取查询字符串。这是简单的部分。 我在 Windows 服务中运行 HttpListene
这个问题在这里已经有了答案: Handling multiple requests with C# HttpListener (3 个答案) 关闭 8 年前。 我有这个 HttpListener,它
我在这里遇到一个问题,与 HttpListener 有关。 当一个请求的形式 http://user:password@example.com/ 制作完成,如何获取用户名和密码?HttpWebRequ
我是一名优秀的程序员,十分优秀!