我是一名 C++ 程序员,但我的问题是关于 Delphi 网络套接字库 Indy。
本质上,就像微软用 WinXP SP2 削弱了原始套接字,这样 TCP 数据就不能通过它们发送,那么这是否也适用于 Indy?我的一位朋友向我推荐了它,而不是使用 WinSock API。
如果不是,那么使用 WinPCap API 使用原始 TCP 套接字的唯一方法是什么?
我是一名 C++ 程序员,但我的问题是关于 Delphi 网络套接字库 Indy。
本质上,就像微软用 WinXP SP2 削弱了原始套接字,这样 TCP 数据就不能通过它们发送,那么这是否也适用于 Indy?我的一位朋友向我推荐了它,而不是使用 WinSock API。
如果不是,那么使用 WinPCap API 使用原始 TCP 套接字的唯一方法是什么?
正如您从其他答案中看到的那样,有很多 Delphi 库可以简化网络编程。然而,AFAIK 它们都在 WinSock API 上提供了一个更友好的层(在 Windows 上,在其他操作系统上的标准套接字 API 上),因此无法做 WinSock API 无法做的任何事情。特别是它们可能支持也可能不支持原始套接字访问,但如果操作系统无法通过套接字发送数据,库也只会返回错误。
有关最新 Windows 操作系统版本上原始套接字限制的更多信息,请参阅此 MSDN 页面,特别是“原始套接字限制”部分。它非常清楚地表明
为了解决这些问题,可能需要为特定的网络协议编写一个 Windows 网络协议驱动程序(设备驱动程序)。
Delphi 网络编程库都没有自带网络协议驱动程序 AFAIK。两者都不会帮助您解决受限用户帐户的权限问题或 Windows 防火墙的干扰。
当您在问题中提到WinPcap时,您知道它能够做您想做的事情。它有 Delphi 包装器,例如Magenta Systems Internet Packet Monitoring Components。然而,作为一名 C++ 程序员,您最好直接从 C++ 中使用该库,因为 Delphi 没有为您想要执行的套接字编程添加任何内容。特别是您不需要额外的层来隐藏某些 Delphi 库提供的平台差异,因为您将直接针对libpcap API 进行编程。
你应该检查ICS组件
ICS 是一个免费的 Internet 组件库,适用于所有 Delphi、C++Builder、BDS 和 RAD Studio 版本 (win32)。它包括 TCP、UDP、原始套接字、客户端、服务器以及许多高级协议,如 FTP、SMTP、POP3、NNTP、HTTP 等。
我更喜欢突触而不是 Indy,它的架构更简单,因此更容易理解。
印地工作得很好。我经常使用它,几乎没有问题。
如果您正在寻找更基本的套接字交互,您可以使用这些其他组件:
所有这些组件也随 Delphi 一起提供。
不直接了解winpcap,但我相信它有一个delphi包装器。我目前不知道我在哪里看到过它,但使用 Google 代码搜索应该不难找到。