gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:51:08 24 4
gpt4 key购买 nike

有什么方法可以将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com