每个进程在使用网络资源时都会被分配一个端口号。进程只能从其指定的端口号发送和接收网络数据。
内核如何允许IDS、IPS和Wireshark等安全程序接收所有不属于它们的网络数据?涉及哪些系统调用或库例程来实现这一点?
答案1
与其说是如何,不如说是为什么...
端口号的目的是限制和界定系统已经可用的传入数据,因此原始套接字并不具有内核赋予的特殊权力,相反:正常(即非原始套接字) ) IP 套接字具有可专门寻址的特殊能力。
打个比方,将彩色玻璃窗视为 IP端口编号套接字和透明窗口作为原始套接字。并不是后者接收到的信息更多,而是过滤掉的信息更少。这个类比还说明了这种情况,因为造成这种情况的不是内核,而是网络的物理本质。内核不会不遗余力地获取信息,就像窗户不遗余力地获取阳光一样:阳光已经存在并且来自系统外部。