redirect基于端口的stream量(iptables)

我目前正在开发一个能够进行ARP中毒的应用,以便成为中间人,并进行一些智能过滤。 我会详细解释这个问题,以便让大家知道发生了什么事情。

我有4个主机,即:

  • A – 192.168.1.1
  • B – 192.168.1.2
  • C – 192.168.1.3
  • D – 192.168.1.4

主机A是在中间的人,所以在networking内的所有stream量将被redirect到他。

说主机B想ping主机C,但由于主机A是MITM,ping将被redirect到主机A.我在主机A的应用程序必须能够将ping数据包转发到主机C(其原始的预期路由)。

但是,应用程序可以决定它想转发的某些数据包。

例如,如果主机B想要FTP到主机C这一次,我希望主机A与数据包的目标IP地址冲突,以便主机B的数据包实际上去主机D(只是一个例子,FTP连接可能行不通,确定)

基本的想法是应用程序能够根据协议redirect通信。

这是问题出现的地方,我不知道我该怎么做。 我已经阅读了iptables,看来(纠正我,如果我错了),iptables是能够与预先路由function的数据包的目的地址。

我也已经完成了一个叫做libnetfilter_queue(nfqueue)的模块的search,这个模块似乎也能够与数据包一起破解,尽pipe我并不确定如何。

有人可以就我应该采取的正确方法提出build议吗? 如果可能的话,你能提供一些能够解决上述情况的例子吗?

如果它是真的,你说什么,所有的stream量都通过主机A,那么你可以使用iptables在主机Aredirect到其他主机然后打算。

fe:将端口80上的D→C的stream量重新路由到B

 iptables -t NAT -A PREROUTING -p tcp --dport 80 -s 192.168.1.4 -d 192.168.1.3 -j DNAT --to-destination 192.168.1.2:80 

至于你的例子(从B到C的FTP)

 iptables -t NAT -A PREROUTING -p tcp --dport 21 -s 192.168.1.2 -d 192.168.1.3 -j DNAT --to-destinatin 192.168.1.4:21 

将来自B的所有stream量重新计入C到D:

 iptables -t NAT -A PREROUTING -p tcp -s 192.168.1.2 -d 192.168.1.3 -j DNAT --to-destination 192.168.1.4 

如果需要更多的例子,我可以弥补一些