我正在为一个包含for服务器的封闭源嵌入式设备开发一个模拟器。我正在使用Python在embedded angstromLinux2.6.34中构建模拟器,到目前为止,我已经在功能上实现了far服务器,使其在外观上与浏览器中的原始设备相同。现在,我试图使它看起来与Nmap操作系统和服务扫描相同,结果发现这要困难得多。
Nmap扫描最初证明是非常不同的(没有完全匹配的源设备,我的模拟器死了,Linux 2.6.32-2.6.39)。在完成关闭服务和关闭模拟器上的端口这一显而易见的事情之后,我开始比较来自源设备的wireshark数据包,包括IP和TCP报头,以及嵌入式设备,以确定我需要进行哪些协议级别的更改。一些参数(如TCP窗口缩放)在Linux中使用sysctl.config文件很容易,但其他参数则更难使用。例如,当数据包在源设备上被分割时,PSH标志设置在TCP报头中,而不是在我的设备上,这与“最随意的观察者”也有明显的区别。这里的目标不是简单地混淆我的设备,而是让它从数据包视图(特别是两种类型的nmap扫描)看起来与源设备非常相似。
在我的探索中,我遇到了一些看起来很有希望的解决方案,但当我知道有更简单的解决方案存在时,我害怕浪费更多的时间在应该有效的解决方案上。
下面列出了我尝试过的事情,以及是什么促使我研究另一种方法。他们中的大多数人的问题是缺乏文件。如果有人知道一种特定的方法应该有效,并且可以为我提供适当的文档来帮助我进行配置,我将非常感激。作为一个懒惰的工程师,我正在寻找最简单的解决方案。我不害怕C,但是如果有程序或模块,我可以通过python启动或接口,我更喜欢这样。
从所有这些,我已经跑了埃特盖帽和转移插座最远,因为我认为他们将是最容易的。有这些(或其他)任意调整头的例子吗?谢谢你的帮助!
发布于 2012-09-25 06:10:48
在最近的内核中,您可以使用NFQUEUE来修改包,而不需要任何内核补丁。甚至还有用户空间部分的python绑定。您可以在这里检查:https://www.wzdftpd.net/redmine/projects/nfqueue-bindings/wiki/Examples,它包括一个重写数据包的rewrite.py示例。
对于iptable部分,您需要这样的规则:
iptables -A -p -p tcp --体育80 -j NFQUEUE --p-num 0
其中,末尾的参数是必须与代码中的队列号匹配的队列号。
如果简单的数据包编辑是不够的,您也可以尝试lwIP。Linux中的抽头设备上的lwIP是开箱即用的。要做到这一点,请同时获得lwIP包和控制包。然后,在cont肋骨/port/unix/proj/unixsim中有一个使用lwIP实现几件事情的示例,包括通过tap设备实现web服务器。
从实际网络接口访问lwIP堆栈的最简单方法是为tap设备设置NAT,并将端口从实际接口转发到tap接口。不过,这仍然涉及内核,因此它可能会显示出比您想要的更多信息。一些可能的选择可能是将它与NFQUEUE结合起来,或者修改lwIP来使用原始套接字,而不是点击接口(我不认为它会开箱即用)。
有关nmap指纹如何工作的信息,您可以在这里查看:http://nmap.org/book/osdetect-methods.html。要从nmap获取原始指纹,请使用"-vv“选项。此外,您可能希望使用最新版本的nmap,因为它将有最最新的指纹。
https://stackoverflow.com/questions/12565465
复制相似问题