如何在完全下载之前丢弃数据包

时间:2014-10-27 14:33:16

标签: c sockets tcp

我正在使用C创建一个用于网络过滤的个人应用程序。我已经知道您可以使用以下代码记录和分析下载的数据包信息:

tcpPacket = recvfrom(raw_socket , buffer , 65536 , 0 , &serverAddress , &serverAddressSize);

但这要求首先下载tcp数据包。我需要的是,即使在下载之前,过滤器也会被执行,假设它会检查源IP,并且基于此,它接受或拒绝它。

注意:是的我知道iptables,但我不想使用它,因为我想学习如何使用原始套接字。

2 个答案:

答案 0 :(得分:0)

在面向数据包的网络(如TCP / IP)中,每个数据包都包含 地址信息和实际有效负载。

因此,根据数据包中的数据,在您下载数据包之前删除数据包是没有意义的。

如果您可以停止实际(硬件)接收器中间数据包,这可能是可以想象的,但我认为任何“正常”网络硬件或API都不会暴露这样的功能。

答案 1 :(得分:0)

我现在得到了我需要的东西。我需要在接受连接http://man7.org/linux/man-pages/man2/getpeername.2.html后调用getpeername(2)。