【问题标题】:Windows forward packets to c# applicationWindows 将数据包转发到 c# 应用程序
【发布时间】:2013-09-24 21:59:12
【问题描述】:

有没有办法将 tcp 数据包转发到我在 windows (10) 上的 c# 应用程序并让 TcpListener/HttpListener 处理请求?在 linux 中,我可以通过设置 iptables(iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 7000)来做到这一点。

例如,在我的 c# 应用程序中,我可以在特定端口(例如 7000)上侦听传入连接(使用 TcpListener 或套接字侦听器)。我能否以某种方式配置窗口以将所有 tcp 流量转发到 127.0.0.1:7000?请记住,数据包的目标 IP 地址与我的计算机在网络中的地址不同(但当然,目标硬件地址相同)。

我在 C# 中使用 Pcap .Net 尝试了另一种方法。我正在捕获数据包并将它们转发到 127.0.0.1。但是,似乎我的主机仍然没有捕获数据包(也许它正在将数据包发送到网关,试图在网络中找到具有该 IP 的主机?)。我总是可以在网络中使用我的本地 IP 地址,但这会导致数据包到达网关然后再返回,这是不必要的,因为我想要的只是让我的 TcpListener 识别传入的连接。我正在使用的代码:

static void processPacket(Packet packet) {
    EthernetLayer ethernetLayer = (EthernetLayer)packet.Ethernet.ExtractLayer();
    IpV4Layer ipLayer = (IpV4Layer)packet.Ethernet.IpV4.ExtractLayer();

    if (ipLayer.Protocol == IpV4Protocol.Tcp) {
        TcpLayer tcpLayer = (TcpLayer)packet.Ethernet.IpV4.Tcp.ExtractLayer();

        if (tcpLayer.DestinationPort == 80) {
           Packet newPacket = BuildTcpPacket(packet, "127.0.0.1"); //copies the packet but changes the ip destination address to 127.0.0.1
                Communicator.SendPacket(newPacket);
                return;
        }
     }
     reroutePacket(packet); //forwards packet to correct destination
 }

【问题讨论】:

  • 恕我直言,这是一个误解。如果您使用 PCap 捕获数据包,那么您已经拥有它们。为什么转发到一个端口只是为了再次接收它们?也许,这会再次触发一次 PCap 捕获,并将其转发,...
  • 您好,Thomas 感谢您的意见。我可以,但我需要在数据包级别重写 TcpListener 的功能(使用 Pcap.net)。我不能在不转发数据包的情况下使用 TcpListener,因为它们具有不同的目标地址,因此不会被 TcpListener “拾取”。
  • 当数据包的目标 IP 地址与我的主机地址不匹配时,会发生什么情况? - 通常他们不会被接走。如果 PCap 在混杂模式下工作,它们将被 PCap 捕获但不会转发给任何应用程序
  • 它们是否会自动重新路由到正确的主机? - 不,在网络上,所有被攻击的 PC 同时监听。 MAC地址匹配的人处理它
  • port forwarding in windows 可能重复。

标签: c# windows port forward pcap.net


【解决方案1】:

使用

netsh interface portproxy add v4tov4 listenport=9999 listenaddress=0.0.0.0 connectport=80 connectaddress=127.0.0.1

会将所有对系统注册 IP 地址的请求重定向到 localhost。

防火墙会丢弃不匹配内部IP地址列表的数据包,捕获此类流量的唯一方法是将网卡设置为混杂模式以通过wireshark等工具捕获所有流量。

我的想法:

  1. 将所有流量转储到文件 (wireshark) 并尾部发送到其他主机进行处理。

  2. 使用port mirroring 设置交换机,并使用专用主机进行流量分析。

欢迎任何 cmets!

在计算机网络领域,混杂模式是指以太网硬件的特殊模式,特别是网络接口卡 (NIC),它允许 NIC 接收网络上的所有流量,即使它不是针对此的网卡。

【讨论】:

  • 我尝试使用 netsh 但 HttpListener 不接收 http 请求(由于 Pcap 而打开混杂模式)。将流量转储到文件,然后从 C# 应用程序(或端口镜像)拖尾它不是我的需要。我已经有来自 Pcap 的数据,我需要让我的应用程序使用 TcpListener 或 HttpListener 来接收请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2023-03-19
  • 2020-08-21
  • 1970-01-01
相关资源
最近更新 更多