Indy 在 Windows 上支持原始 TCP 套接字吗?

发布于 2024-08-09 15:41:00 字数 211 浏览 7 评论 0原文

我是一名 C++ 程序员,但我的问题是关于 Delphi 网络套接字库 Indy。

本质上,正如 Microsoft 在 WinXP SP2 中削弱了原始套接字,使得 TCP 数据无法通过它们发送一样,这是否也适用于 Indy?我的一位朋友向我推荐了它,而不是使用 WinSock API。

如果不是,那么是通过 WinPCap API 使用原始 TCP 套接字的唯一方法吗?

I'm a C++ programmer, but my question is about the Delphi network socket library Indy.

Essentially as Microsoft crippled raw sockets with WinXP SP2 so that TCP data cannot be sent over them, does this then also apply to Indy? One of my friends recommended it to me rather then using the WinSock API.

If not, then is the only way to use raw TCP sockets using the WinPCap API?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

念三年u 2024-08-16 15:41:00

如果没有,我知道 Delphi 的 synapse 确实。最新版本现已支持D2009,并且正在积极支持中。

If it doesn't, I know that synapse for Delphi does. The latest version now supports D2009 and it is being actively supported.

舞袖。长 2024-08-16 15:41:00

正如您从其他答案中看到的,有很多 Delphi 库可以简化网络编程。然而,据我所知,它们都在 WinSock API 上提供了一个更友好的层(在 Windows 上,在其他操作系统上的标准套接字 API 上),因此无法执行 WinSock API 无法执行的任何操作。特别是,它们可能支持也可能不支持原始套接字访问,但如果操作系统无法通过套接字发送数据,则库也只会返回错误。

有关最新 Windows 操作系统版本上原始套接字限制的详细信息,请参阅 此 MSDN 页面,特别是“原始套接字的限制”部分。它非常清楚地表明

要解决这些问题,可能需要为特定网络协议编写Windows网络协议驱动程序(设备驱动程序)。

AFAIK 的两个 Delphi 网络编程库都没有附带自己的网络协议驱动程序。两者都无法帮助您解决有限用户帐户的权限问题或 Windows 防火墙的干扰。

当您在问题中提到 WinPcap 时,您知道它能够执行您想要的操作。有一些 Delphi 包装器,例如 Magenta Systems Internet 数据包监控组件。然而,作为一名 C++ 程序员,您可能最好直接使用 C++ 中的库,因为 Delphi 没有添加任何关于您想要执行的套接字编程的内容。特别是,您不需要额外的层来隐藏某些 Delphi 库提供的平台差异,因为您将直接针对 libpcap API 进行编程。

As you can see from the other answers there are a lot of Delphi libraries to simplify network programming. However, AFAIK they all provide a friendlier layer over the WinSock API (on Windows, over the standard socket API on other OSs) and thus are not able to do anything that the WinSock API isn't able to do. In particular they may or may not support raw socket access, but if the OS fails to send data over the socket the libraries will only return errors as well.

For more information about the limitations of raw sockets on most recent Windows OS versions see this MSDN page, in particular the section "Limitations on Raw Sockets". It states quite clearly that

To get around these issues, it may be required to write a Windows network protocol driver (device driver) for the specific network protocol.

Neither of the Delphi network programming libraries comes with its own network protocol driver AFAIK. And neither will help you with permission issues on limited user accounts, or the interference of the Windows Firewall.

As you mention WinPcap in your question you know it is capable of doing what you want. There are Delphi wrappers for it, like Magenta Systems Internet Packet Monitoring Components. However, as a C++ programmer you may be better off to use the library directly from C++, as Delphi adds nothing in regard to the socket programming you want to do. In particular you won't need the extra layer to hide platform differences that some of the Delphi libraries provide, as you will be programming directly against the libpcap API.

枯叶蝶 2024-08-16 15:41:00

印地的表现相当不错。我经常使用它,几乎没有什么问题。

如果您正在寻找更基本的套接字交互,您可以使用以下其他组件:

  • TTCPClient
  • TCPServer
  • TClientSocket
  • TServerSocket

所有这些组件也随 Delphi 一起提供。

不直接了解 winpcap,但我相信有一个 delphi 包装器。我目前不知道在哪里看到过它,但使用 Google 代码搜索应该不难找到。

Indy works quite well. I use it quite a bit with few problems.

If your looking for more basic socket interaction you could use these other components:

  • TTCPClient
  • TCPServer
  • TClientSocket
  • TServerSocket

All of these components also ship with Delphi.

Don't know about winpcap directly, but I believe there is a delphi wrapper for it. I don't currently know where I've seen it but it shouldn't be hard to find using Google code search.

天生の放荡 2024-08-16 15:41:00

您应该检查 ICS 组件

ICS 是一个免费的互联网组件
所有 Delphi、C++Builder 的库,
BDS 和 RAD Studio 版本 (win32)。
它包括 TCP、UDP、原始套接字、
客户端、服务器以及许多高
FTP、SMTP 等级别协议
POP3、NNTP、HTTP 等。

http://www.overbyte.be/

you should check ICS components

ICS is a free internet component
library for all Delphi, C++Builder,
BDS and RAD Studio versions (win32).
It includes TCP, UDP, raw sockets,
clients, servers, as well as many high
level protocols such as FTP, SMTP,
POP3, NNTP, HTTP and more.

http://www.overbyte.be/

灯角 2024-08-16 15:41:00

与 Indy 相比,我更喜欢 synapse ,它的架构更简单,因此更容易理解。

I would rather prefer synapse over than Indy, it's architecture is more simpler thus easier to understand.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文