Предположим, у меня есть машина с IP, например 183.41.22.22
. Я хочу прослушать все HTTP-сообщения, которые будут отправлены на порт 43 этого IP на локальном хосте. На самом деле меня не очень интересуют все сообщения, отправляемые на этот порт, только сообщения, отправляемые на https://183.41.22.22:443/CustomerData/
В документации класса 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);
};