c - 在Linux中使用原始套接字发送原始数据(PSH-ACK)

标签 c linux raw-sockets

我编写了一些程序,假装建立连接,然后发送数据包;通过在 linux 和 C 语言中使用原始套接字。

幸运的是,由于连接已建立,我已经很好地实现了该程序。我现在的问题是,我不能花太多时间,通过从服务器接收 ACK 来猜测如何填充 psh-ack(数据包),并且还可以在 netcat 的输出缓冲区上看到数据...

那么,请问有人可以帮忙格式化数据包吗?我花了很多时间,给你一个完整的流量日志会很容易。

提前致谢。希望尽早提出建议...;)。

P.S:如果不清楚,我假装实现自己的用户空间 TCP 堆栈只是为了加快 TCP 网络的进程,只是为了将网络进程嵌入到非阻塞程序执行中,以及快速的网络结果集流程。

正如你们中的一些人可能知道的,Linux 盒子会自动向发送 SYN_ACK 的服务器发送应答,但 RST 连接,并且不可能通过实现 TCP 堆栈来建立连接。所以,我应该说,我正在使用名为“TCP/UDP 黑洞 DoS 预防”的 grsec 保护,它可以防止 Linux 内核向“不连贯”的网络流量发送不希望的响应。

仅此而已。

最佳答案

ip.len = tcp_data_sz + tcphdr_sz + iphdr_sz

tcp.id = id + 1
tcp.seq = same as ACK of three way handshake
tcp.ack_seq = same as ACK of three way handshake

pseudo_hdr.len = tcp_data_sz + tcphdr_sz

tcp.check = (size: psehdr + tcphdr + tcpdata) (pad with 00's until size % 2 = 0).

此链接很有用:http://www.arcesio.net/checksum/checksumTCP.html (大部分西类牙语和英语编辑)。

感谢所有 4 位观看者。

Linuxios:感谢您的精彩评论,现在我以自己的方式找到了解决方案。 (我的方法比常见的linux界面更快:)。

关于c - 在Linux中使用原始套接字发送原始数据(PSH-ACK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15637695/

相关文章:

linux - 在 Linux 中更改 Emac 编辑器的 (C) 语法突出显示?

linux - 使用 Chef 配方将多行附加到配置文件

c - 如何避免多个原始套接字绑定(bind)到同一 IP 地址?

c - Ubuntu 12.04 不支持 libipq

c - 在 C 中搜索链表

linux - 如何在Linux中设置和锁定CPU频率

c - C 中的 char 数组快速排序

linux - 如何丢弃原始套接字中的传入数据包?

c - 将字符指针转换为交换函数的 void 指针的问题

c - C 中的段错误?