gpt4 book ai didi

.net - 如何在没有管理员权限的情况下初始化 Windows 套接字库

转载 作者:可可西里 更新时间:2023-11-01 10:26:24 29 4
gpt4 key购买 nike

我正在编写一个通过 .NET 调用 OpenOffice.org API 的程序。 http://wiki.openoffice.org/wiki/Documentation/DevGuide/ProUNO/CLI/Writing_Client_Programs 处的文档说:

对于 OOo 3.x,代码是这样的:

//C# example for OOo 3.x
//Workaround which is needed when using a socket connection
//This will initialize the Windows socket library.
System.Net.Sockets.Socket s = new System.Net.Sockets.Socket(
AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);

在 Windows XP 和 Windows Server 2003 上运行良好,但在 Windows 7 上运行失败:

An attempt was made to access a socket in a way forbidden by its access permissions

我的理解是因为套接字类型是原始的,并且程序没有以管理员权限运行。所以我的问题是:如何在没有管理员权限的情况下初始化 Windows 套接字库?

最佳答案

访问 RAW 套接字需要 Windows 2000 及更高版本的管理员权限,这在 MSDN 上有描述:

TCP/IP Raw Sockets

Raw sockets offer the capability to manipulate the underlying transport, so they can be used for malicious purposes that pose a security threat. Therefore, only members of the Administrators group can create sockets of type SOCK_RAW on Windows 2000 and later.

...

Note To use a socket of type SOCK_RAW requires administrative privileges. Users running Winsock applications that use raw sockets must be a member of the Administrators group on the local computer, otherwise raw socket calls will fail with an error code of WSAEACCES. On Windows Vista and later, access for raw sockets is enforced at socket creation. In earlier versions of Windows, access for raw sockets is enforced during other socket operations.

没有办法绕过这个限制。另一方面,如果您的目的只是一般地初始化 Winsock,则不需要创建 RAW 套接字来执行此操作。创建 TCP(SocketType.StreamProtocolType.TCP)或 UDP(SocketType.DGramProtocolType.UDP ) 套接字,它不受限制,而且很可能是 OOo 实际上将在内部使用的东西。或者,您可以使用 PInvoke 直接调用 Winsock 的 WSAStartup() 函数。

关于.net - 如何在没有管理员权限的情况下初始化 Windows 套接字库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090329/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com