上周末,我发现在大多数情况下我无法再绑定到套接字端口。在.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,但没有发现感兴趣的东西。
我还对ASP.NET Core应用程序运行了perfview,发现IPv4和IPv6地址发生了完全相同的错误。我发现感兴趣的输出是:
thisOrContextObject =“ Socket#15842089” memberName =“ DoBind” message =“ System.Net.Sockets.SocketException(10013):尝试以其访问权限禁止的方式访问套接字”
所引用的套接字是IPv4套接字,但是IPv6也发生了相同的错误。
对于debugging CoreFX on Windows docs,我也尝试使用logman捕获跟踪,但是仍然没有发现错误的原因。
我通过防火墙中的端口和物理路径将我的应用程序列入了白名单,但均未导致任何更改。
对于每个Get-NetTCPConnection |? { $_.LocalPort -eq 5000}
,相关端口上没有任何运行。
确认事件日志中未显示任何错误或警告。
即使我可能无权控制计算机(例如,AV /安全软件)的所有方面,我该怎么做才能确定拒绝访问错误的原因?>