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