我正在使用端口扫描程序作为学校项目的一部分,我正在使用原始套接字。我的理解是:
对原始套接字使用多线程时,每个pthread都不会获取NIC看到的数据包的副本。因此,为了处理所有不同的线程,我需要一个接收线程将消息传递给正确的线程。
这是对的吗?
编辑:我的假设是,操作系统只向进程发送一次数据包。如果错误的pthread正在接收数据包,则可能会错过数据包。
答案 0 :(得分:3)
我认为如果你想在所有线程中接收数据包,你只需要在每个线程中创建一个单独的原始套接字(具有相同的参数)。我还没有找到一个在Linux上描述这个的好资源,但这就是它在Windows上的documented:
如果同时在计算机上打开了多个SOCK_RAW套接字, 可以将相同的数据报传送到所有打开的套接字