是否有方法(使用原始套接字或其他方法)获取进程使用的TCP序列号。例如,如果一个进程是活动的,并且有一个活动的TCP连接,那么是否可以从进程启动时开始获取该进程的TCP序列号,或者至少是它接收或发送的最后一个确认号?如果是,我该如何使用C语言或任何低级语言?
实际上,可以:
processA检测与活动进程B关联的已发送(在processA启动时)的TCP序列号?
或
流程A是否可以检测到流程A在事实发生后接收或发送的最后一个确认号?
最佳答案
在前面提到的选项中,libpcap是最好的,因为它为您提供了一种接近平台独立的捕获数据包的方法。
然而,Linux上的另一个选项,也是我越来越喜欢的,是使用iptablesNFQUEUE目标将您感兴趣的数据包发送到用户空间(可能与tee结合使用)。使用这种技术,您可以使用iptables的功能,只获取您感兴趣的数据包(例如syn或基于概率的一些随机数据包)。
如何使用nfqueue的一个例子是here和here。使用原始表中的nfqueue确保对所有数据包进行评估。Libnetfilter_queue应用于简化接收数据包的过程。
关于c - 用于获取Windows,Linux和Mac的TCP序列号的C代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12207953/