triplesheep 发表于 2015-07-05 20:06

【socket+tcpdump+netfilter】关于本机间socket包可不可以抓包问题

1、之前查资料的时候说是本机间的socket TCP通信是抓不到包的,但是最近在网上用了一个简单的tcp的socket通信程序绑定本机的ip,用tcpdump抓包发现可以很清楚的看到TCP3次握手建立以及数据传输的过程,就是抓到包了。然后用netfilter写了一段分析的程序发现在PREROUNTING 、LOCAL_IN、 LOCAL_OUT、 POSTROUNTING点都有抓到建立的socket间传送的包。所以本机间的socket之间的数据包是可以抓到的是吗?
2、后来我在netfilter的程序中在LOCAL_OUT点将抓到的包的目的端口和源端口交换,重新计算校验码发包,tcp的连接应该是不能建立的才对,但是socket程序运行正常,服务器和客户端的通信也正常,netfilter的抓包分析显示目的端口和源端口的确是发生了交换,一系列的包的目的地址和源地址都变成固定的,这样怎么能够正常进行通信呢?想不明白,请教一下大家。
3、想问一下最近看到的netfilter构造包的程序要么是在源数据包的基础上直接改(我对于socket写的netfilter程序就是直接改的),要么是复制源数据包对新包进行修改,原包丢弃,想问一下大家可以两个都一起发送吗?就是原包也发送,新构造出来的包也发送。netfilter可以这样做么?
谢谢大家的帮助,跪谢ORZ~~~

nswcfd 发表于 2015-07-06 12:37

1. lo->lo的报文可以抓,不论是通过af_packet接口还是NF接口。
2. 现在才明白了你上一个帖子里的上下文。:em06:
发个抓包的截图,注意抓包点(分为rx和tx两个点)跟你的改包模块之间的位置关系。

triplesheep 发表于 2015-07-11 23:41

跪谢亲的回复昂~~~那个抓包程序被我删了,我觉得可能我写的代码有问题,所以我打算先看看先。
还有那个lo->lo的抓包,我用的不是localhost的ip:127.0.0.1,用的是本机ifconfig出来的ip地址进行试验的,不是本地回环的这样也能抓到包?或者什么情况下socket程序抓不到包呢?:em14: ,再次跪谢大大ORZ~
回复 2# nswcfd


   

nswcfd 发表于 2015-07-13 11:15

使用本地ip效果上跟127.0.01是一样的,都是路由到lo。
tcpdump抓包点(egress方向)发生在dev_queue_xmit之后。
抓不到包的原因,要么被pcap_filter过滤掉了,要么由于队列满导致了丢包(低速率下不应该存在)。

PS,libpcap有个“特性”,lo-egress的报文不回调callback。
它的理由是,既然lo-egress的报文马上就要被lo-ingress逻辑接收,仅让后面那个lo-ingress点来回调,
这样可以避免一个报文被tcpdump显示两次,给用户造成困惑。

夏尾鱼 发表于 2018-06-25 15:03

萌新前来学习一下:em17::em03:
页: [1]
查看完整版本: 【socket+tcpdump+netfilter】关于本机间socket包可不可以抓包问题