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

标签 c# windows port forward pcap.net

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

例如,在我的 C# 应用程序中,我可以监听特定端口上的传入连接(使用 TcpListener 或套接字监听器),比方说 7000。我可以以某种方式配置 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
 }

最佳答案

使用

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

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

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

我的想法:

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

  2. 设置开关使用port mirroring并有专门的主机进行流量分析。

欢迎任何评论!

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

关于c# - Windows 将数据包转发到 C# 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18901087/

相关文章:

c# - 如何访问多个 Xamarin "Picker"内的选定参数

c++ - g++ makefile "was not declared in this scope"用于 winbase.h 中的元素

android - 如何识别充电器端口的连接?

javascript - 如何使用 javascript 获取正在运行(或部署)的 Web 应用程序的默认端口号

c# - 创建一个 Rich Repeater,DataBind 消除自定义添加的控件

c# - VS2015自动完成功能不起作用

c# - 如何处理名称超过 259 个字符的文件?

windows - 适用于 Windows 的 WebUSB 和驱动程序

nginx - 如何使 lightttp 和 nginx 运行在具有不同 IP 地址(相同接口(interface))的同一端口上?

c# - 不断地让新的对象正常吗?