Ближе к концу прошлой недели я обнаружил, что в большинстве случаев я больше не могу связываться с портами сокетов.Это происходит в .NET Core 2.2, ASP.NET Core и для служб WCF.
Я создал ниже пример приложения .NET Core 2.2 для тестирования:
public class Program
{
static int Main()
{
try
{
const int connectionQueueSize = 1;
var endPoint = new IPEndPoint(new IPAddress(new byte[]{127,0,0,1}),5000);
using (var socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
{
try
{
socket.Bind(endPoint);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Failed to bind: {ex.Message}");
Console.Error.WriteLine(ex.StackTrace);
return 1;
}
try
{
socket.Listen(connectionQueueSize);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Failed to listen: {ex.Message}");
Console.Error.WriteLine(ex.StackTrace);
return 2;
}
Console.WriteLine($"SUCCESS: bound and listened to: {endPoint.Address}:{endPoint.Port}");
socket.Close();
return 0;
}
}
catch (SocketException ex)
{
Console.Error.WriteLine($"FAILED: {ex.Message}");
Console.Error.WriteLine(ex.StackTrace);
return 3;
}
}
}
ВыводПриведенное выше приложение выглядит следующим образом (оба запускаются под моей учетной записью, учетной записью домена с правами локального администратора и при запуске от имени администратора):
Failed to bind: An attempt was made to access a socket in a way forbidden by its access permissions
at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at SocketBind.Program.Main() in c:\source\samples\SocketBind\SocketBind\SocketBind\Program.cs:line 19
Фон :
Моя машина работает в корпоративной среде с несколькими антивирусными программами, работающими в дополнение к некоторым антивирусным программам.До прошлой недели у меня не было проблем.
Попытки решения:
Я пробовал perfmon при попытке связать, но не увидел ничего интересного.
Я также запустил perfview для приложения ASP.NET Core и обнаружил, что точно такая же ошибка произошла как для адресов IPv4, так и для адресов IPv6.Интересный вывод был:
thisOrContextObject = "Socket # 15842089" memberName = "DoBind" message = "System.Net.Sockets.SocketException (10013): была сделана попытка получить доступ ксокет в пути, запрещенном его правами доступа "
Указанный сокет был сокетом IPv4, но такая же ошибка произошла и для IPv6.
Per отладка CoreFX на Windows docs , я также пытался получить трассировку с помощью logman, но я все еще не видел причину ошибки.
Я внес свой белый списокприложение как по порту, так и по физическому пути в межсетевом экране, но ни одно из них не привело к каким-либо изменениям.
Per Get-NetTCPConnection |? { $_.LocalPort -eq 5000}
, на рассматриваемом порту ничего не работает.
Подтверждено, что в журналах событий нет ошибок или предупреждений.
Что можно сделать, чтобы определить причину отказа в доступеошибка, хотя у меня может не быть доступа к контролю каждого аспекта того, чтонаходится на компьютере (например, AV / Security Software)?