准备在linux环境下实现nat程序。刚开始想的比较简单,以为通过libpcap抓包,libnet发包就可以实现nat功能了。
使用libpcap抓包后要分析数据包的源地址、源端口、目的地址、目的端口信息,以判断是否需要转发。要建立转发表,根据转发规则实现数据包的转发。转发过程中需要修改源地址、源端口或者目的地址、目的端口信息,并重新计算校验和,这些功能libnet都可以实现。但出现了问题,libpcap抓取的数据包会被交付给系统内核处理,内核处理时发现数据包所指的目的端口在本机并未被开启,就发送了端口不可达的错误,这样就造成了通信信息不可达。
在网上搜了一下,发现linux提供了netfilter机制为内核数据包处理过程提供了函数接口,现在还没有开始尝试,,,,尽快弄。。。
小记:libpcap也是基于linux原始套接字的