我正在尝试编写一个TCP透明代理以在Linux上运行。

我希望在收到传入连接后启动相应的传出连接,但是如果传出连接成功,则仅接受(SYN | ACK)传入连接。

TCP_DEFERRED_ACCEPT不执行我想要的操作-它始终发送SYN | ACK。

问题是:如何使用Linux套接字API接受TCP连接,但推迟SYN | ACK?

#1楼 票数:0

您可以在Linux上执行此操作,但不能通过套接字API。 您将使用NFQUEUE目标,该目标允许您将一些数据包重定向到用户空间,并从程序中确定它们的命运。

令人费解的是,您仍然必须在用户空间中解析数据包,但是搜索一些TCP标志并不难,也不需要完整的TCP堆栈。 这样,Linux仍然可以完成整个网络工作。

在您的情况下,似乎同时使用NFQUEUE和传统套接字API。 前者将给您早期的决定,后者将访问TCP流数据。 虽然我从未尝试过。

例如,请参阅https://home.regit.org/netfilter-zh/using-nfqueue-and-libnetfilter_queue/

  ask by Donald Gordon translate from so

未解决问题?本站智能推荐:

2回复

如何设置linux内核不发送RST_ACK,这样我就可以在raw socket中给出SYN_ACK

我想问一个关于原始套接字编程和linux内核TCP处理的经典问题。 我已经完成了对linux原始套接字编程问题 , 如何正确地重现TCP协议3路握手的一些相同线程的研究? 和TCP ACK欺骗 ,但仍然无法得到解决方案。 我尝试制作一个不听任何端口的服务器,但是从远程主机嗅探SYN数据
1回复

tcp_max_syn_backlog 和 somaxconn 有什么区别?

我一直在阅读一些关于 Linux 上 TCP 实现的文章,我很困惑, net.ipv4.tcp_max_syn_backlog和net.core.somaxconn和作为参数传递给listen()系统调用的backlog有什么区别,以及net.core.somaxconn之间的关系它们之间。 P
1回复

为什么应用程序可以在 CLOSE_WAIT 状态(Linux)下接受和读/写 TCP 连接?

我的假设是当 TCP 连接处于 ESTABLISHED 状态时,服务器可以从/向套接字读/写。 但是我看到当 TCP 连接处于 CLOSE_WAIT 状态时,服务器实际上可以读取和写入套接字。 当客户端关闭了它的连接,但服务器还没有检测/处理流结束的情况时,就会发生这种情况。 例如。 同步的、阻塞
1回复

在Linux上为Web服务器进行调整以接收ACK超时

我为某所大学的环境科学部门使用遥感设备,但在延迟方面遇到了麻烦。 我们在现场有传感器,可以定期将更新(作为POST)发送回运行Linux和简单Web服务器的盒子中。 这些设备通过无线中继器的菊花链连接(我们正在尝试使用短波作为商业蜂窝网络的替代方案)。 我们的问题来自某些链接的高延迟;
2回复

TCP的套接字与Linux的TCP套接字

Linux API和TCP协议都具有称为“套接字”的概念。 它们是同一概念吗,Linux的TCP套接字是否实现TCP的套接字概念? 连接和插座之间的关系: 我听说两个连接不能共享Linux的TCP套接字 ,这是真的吗? Tenebaum的计算机网络(2011年5月5日,第6.
1回复

原始TCP套接字在发送初始数据后接收恒定的PSH,ACK数据包

我目前正在尝试仅使用原始套接字创建Linux回显客户端。 我在一台计算机上运行普通的TCP服务器,而在客户端,我使用的是原始TCP套接字。 我正在客户端运行Libpcap,以接收数据包并在收到数据包时回复。 我完成了三种方式的握手,并且在客户端和服务器之间建立了连接。 我可以发送第一
1回复

套接字服务器返回somme请求的tcp错误[RST,ACK]

我使用socket在linux上开发了一个带c的服务器。 服务器运行没有问题。 如果我从Web浏览器向服务器发出请求,服务器会毫无问题地响应请求。 但我在捕获流量(使用wireshark)中评论说我的服务器重新发生了一些(很少)tcp错误[RST,ACK]。 这里是tcp错误
2回复

为什么套接字连接被阻止并且TCP内核不断重传[ACK]数据包

我们面临的一个问题是,从一段时间以后,特定的套接字连接将被阻止,客户端的tcp内核将继续转发[ACK]数据包。 拓扑流程如下: 以下是WireShark捕获的数据包: A)服务器 B)客户 8013是服务器端口,6757是客户端NAT端口。 为什么即使服务