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