所有版本的 Linux 都允许通过原始套接字进行通信吗?
在 Windows 中,Windows XP SP2 之后的版本似乎具有通过原始套接字发送流量的功能,但受到了两个方面的限制:
- TCP 数据不能通过原始套接字发送。
- 源地址无效的 UDP 数据报无法通过原始套接字发送。任何传出的 UDP 数据报的 IP 源地址都必须存在于网络接口上,否则数据报将被丢弃。
Linux 中是否有类似的安全措施?有什么想法吗?
非常感谢,Karthik Balaguru
答案1
这些安全措施对大多数人来说都是令人烦恼的。Linux(和 NetBSD)是开源的,无论如何,你都可以让内核做你想做的事。
真正的安全在于是否拥有 root 权限。这是理智的,也是应有的方式。
答案2
Windows 施加的限制并没有真正的安全优势。要实际使用原始套接字,您需要在 Windows 和 *nix 下都是超级用户;由于您是超级用户,因此您只需在 Windows 上安装自己的存根协议驱动程序并发送您想要的任何数据包即可。或者,您可以修补tcpip.sys
(或使用任何适当的文件)以删除限制,就像对半开连接限制所做的那样。这比简单地在 SOCK_RAW 套接字上发送要多得多,但只需执行一次。
Windows 的所有限制都是为了防止有缺陷的(而不是主动恶意软件)造成问题,打破在引入限制时存在的一些恶意软件(任何更新的恶意软件都可以简单地绕过限制),并惹恼任何需要注入一些数据包进行测试的网络管理员或软件开发人员。