Windows 将数据包转发到 c# 应用程序

本文关键字:应用程序 转发 数据包 Windows | 更新日期: 2023-09-27 18:32: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 或套接字侦听器)。 我可以以某种方式配置 Windows 以将所有 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
 }

Windows 将数据包转发到 c# 应用程序

使用

netsh 接口端口代理添加 v4tov4 侦听端口=9999 侦听地址=0.0.0.0 连接端口=80 连接地址=127.0.0.1

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

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

我的想法:

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

  2. 使用端口镜像设置交换机,并具有用于流量分析的专用主机。

欢迎任何意见!

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