从没有绑定的地址在Netcat中发送数据包

时间:2014-09-10 18:06:09

标签: bash netcat

我已经使用ifconfig eth0 promisc设置了混杂模式,并且在python中我可以发送数据包而不使用原始套接字进行绑定。 我已完成命令nc -vs 192.168.11.1 -p 22 192.168.11.2 22,看看我是否可以将数据包作为另一台计算机发送而没有该计算机的绑定地址。 这个功能在netcat中是可行的还是你必须绑定?目前,该机器没有地址设置,但处于混杂模式,因此可以看到所有流量。

更新:

在python中我创建了一个十六进制字符串,然后使用structsend。我利用ifconfig设置混杂模式(因为我无法弄清楚如何在python中执行它)然后运行我的python脚本的bash脚本,但是一旦它设置好了它似乎只需自动选择eth0而不设置任何内容。

我不确定netcat是否可以这样做,实用程序中的任何内容似乎都没有表明这一点。我可能只是制作一个python脚本,以便在可能的情况下使用原始套接字。

1 个答案:

答案 0 :(得分:1)

我认为netcat不可能,除非它还允许使用原始套接字(绑定到接口)。

鉴于您没有地址设置,查看路由表是有益的:

$ route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
$

e.g。空。

netcat默认使用TCP。对于TCP套接字,您不必绑定到源接口,但如果不这样做,内核堆栈将在内核路由表中查找目标地址,以确定将其发送出去的接口。由于没有寻址,路由表为空,路由查找将失败。因此,TCP将无法发送其第一个SYN数据包。

我考虑的一个可能的解决方法是添加适当的静态路由,这应该有助于发送初始SYN。但是TCP仍然无法工作,因为当SYN-ACK从hext-hop路由器返回时,下一跳路由器将没有该机器的ARP条目,并且如果该机器将无法解析一个机器有IP地址。

如果您关心的只是发送流量,您可能会使用UDP套接字和静态路由,但即使这样,内核堆栈也可能不允许它。

对于python中的原始套接字,我假设您 绑定到本地接口,这允许您在较低级别操作并绕过上面的检查。