gpt4 book ai didi

c++ - Libnet 与用于数据包注入(inject)的原始套接字

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:32 26 4
gpt4 key购买 nike

我需要更有经验的网络程序员的意见/建议,了解一些关于 GNU/Linux 系统上的数据包注入(inject)的东西。我正在开发一个用于数据包注入(inject)和嗅探的开源 C++ 库。图书馆是libcrafter .页面上有一些示例可以了解该库的工作原理。

我有一个进退两难的境地,非常感谢您的想法。目前,库“提供”了两种在线上写入数据包的方法。首先,构建数据包:

Packet pck = IP()/UDP()/DNS();

1) 然后用 Send() 函数发送:

pck.Send("eth0");

2) 或使用 RawSocketSend() 函数(这是我用于基准测试但可供用户使用的“实验性”函数):

pck.RawSocketSend(sd);

其中 sd 是套接字描述符。如果数据包有链路层协议(protocol)(如以太网),sd 应该是一个 PACKET 套接字描述符。如果不是,应该是一个 RAW 套接字描述符。

发送数据包的标准和记录方式是使用 Send() 方法。目前,Send() 方法使用 libnet用于将数据包写入线路。

问题是 Send() 函数比 RawSocketSend() 慢得多...我经常不得不做很多棘手和烦人的事情来调整 libcrafter 处理协议(protocol)字段的方式以正确使用libnet_build* 函数(这会导致性能下降)。每次我实现一个协议(protocol)时,我都必须查看 libnet 文档,这使得开发过程非常繁琐和缓慢。所以,我想停止使用 libnet 进行数据包注入(inject),并直接在 Send() 函数内使用 RAW/PACKET 套接字。

Libcrafter 旨在以对用户透明的方式处理数据包制作的所有繁琐工作(校验和计算、字节排序、 header 长度等)。使用 RAW/PACKET 套接字(RawSocketSend 函数)在最流行的 GNU/Linux 系统(Ubuntu、Fedora、Debian)上一切正常。

我使用 libnet 的唯一原因是可移植性问题。但我没有知识或意图将 libcrafter 移植到其他系统而不是 GNU/Linux 系统。

我的问题是:

  1. 在 GNU/Linux 的数据包注入(inject)库上使用 RAW/PACKET 套接字是否谨慎和安全?
  2. 如果我决定停止使用 libnet,您是否知道关于在 GNU/Linux 发行版之间使用 RAW/PACKET 套接字的可移植性我应该考虑的一些问题?
  3. RAW/PACKET 套接字接口(interface)可能会在未来的内核版本中改变?

非常感谢:-)

最佳答案

开源的美妙之处在于您实际上可以浏览源代码,所以我检查过: http://code.google.com/p/libcrafter/source/browse/libcrafter/crafter/Packet.cpp

并且看到 Packet::send 效率不高:它执行了太多系统调用(每次都将设备名称与实际接口(interface)匹配)并调用 libnet 函数,我猜它每次都打开一个套接字并发送数据包。无论如何,发送数据包的开销太大了。

原始发送,我没有看到函数代码,但我猜它只是使用了send()。如果我是你,如果我对 sendRawPacket() 函数不满意,我会简单地使用行套接字发送它,我已经看到 packet 提供了 getRawBuffer() 函数。

有关原始套接字的更多信息: http://www.tenouk.com/Module43a.html并尝试谷歌。

给你的问题:

1) 我不明白你所说的“安全”是什么意思?一般的回答是“是的,仔细”

2) 关于可移植性,使用原始套接字是 POSIX 标准的一部分,因此它可以在任何 Linux 发行版上运行,也可能在 Windows 上运行。我不知道 libcraft 是否可以移植到 Windows,但它应该可以在任何 Linux 发行版上运行。如果没有,您可以为图书馆做贡献并使其可移植。

3) 我无法回答关于 future 的问题。再次强调,现在是 POSIX 标准,很多年没怎么变了,以后可能会变。我不是先知,但我认为它在不久的将来不会改变。

家伙

关于c++ - Libnet 与用于数据包注入(inject)的原始套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10859756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com