Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows将数据包转发到c#应用程序_C#_Windows_Port_Forward_Pcap.net - Fatal编程技术网

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

Windows将数据包转发到c#应用程序,c#,windows,port,forward,pcap.net,C#,Windows,Port,Forward,Pcap.net,有没有办法将tcp数据包转发到windows(10)上的c#应用程序,并让TcpListener/HttpListener处理请求?在linux中,我可以通过设置iptables(iptables-tnat-A PREROUTING-ptcp——目标端口80-j重定向——到端口7000)来实现这一点 例如,在我的c#应用程序中,我可以监听特定端口上的传入连接(使用TcpListener或套接字侦听器),比如7000。我是否可以将windows配置为将所有tcp流量转发到127.0.0.1:700

有没有办法将tcp数据包转发到windows(10)上的c#应用程序,并让TcpListener/HttpListener处理请求?在linux中,我可以通过设置iptables(iptables-tnat-A PREROUTING-ptcp——目标端口80-j重定向——到端口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接口端口代理添加V4到V4 listenport=9999 listenaddress=0.0.0 connectport=80 connectaddress=127.0.0.1

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

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

我的想法是:

  • 将所有流量转储到文件(wireshark)并跟踪它以发送到其他主机进行处理

  • 设置交换机,使用专用主机进行流量分析

  • 欢迎评论


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

    IMHO存在误解。如果您使用PCap捕获数据包,那么您已经拥有了它们。为什么转发到一个端口只是为了再次接收它们?也许,这将再次触发PCap捕获,并将其转发,…嗨,托马斯,谢谢你的输入。我可以,但我需要在数据包级别重写TcpListener的功能(使用Pcap.net)。如果不转发数据包,我就无法使用TcpListener,因为它们具有不同的目标地址,因此不会被TcpListener“拾取”。当到达我的主机的数据包的目标IP地址与我的主机地址不匹配时,会发生什么情况通常它们不会被捡起来。如果PCap在混杂模式下工作,它们将被PCap捕获,但不会转发到任何应用程序。它们是否自动重新路由到正确的主机?-不。在网络上,所有受攻击的PC都同时侦听。MAC地址匹配的进程可能重复。我尝试使用netsh,但HttpListener无法接收http请求(由于Pcap而启用了混杂模式)。将流量转储到文件,然后从C#app(或端口镜像)跟踪它不是我需要的。我已经有了来自Pcap的数据,我需要让我的应用程序使用TcpListener或HttpListener接收请求。