有没有办法将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.我可以以某种方式配置窗口以将所有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地址到localhost.

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

我的想法:

>将所有流量转储到文件(wireshark)并将其拖尾以发送给其他主机进行处理.
>使用port mirroring设置开关,并有专门的主机进行流量分析.

任何评论欢迎!

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

Windows将数据包转发到c#应用程序的更多相关文章

  1. iOS上的C#库

    我已经完成了droid开发,答案就是创建一些使用我的C#库的Web服务,然后让droid使用这些服务.我假设同样的方法适用于iOS(正确的???

  2. Swift 2.0协议扩展和Java / C#抽象类之间有区别吗?

    通过在Swift2.0中添加协议扩展,似乎协议基本上成为Java/C#抽象类.我唯一可以看到的不同之处在于抽象类限制为单一继承,而Swift类型可以符合任何数量的协议.这是对Swift2.0中的协议的正确理解,还是有其他差异?有几个重要的区别…

  3. Swift有一个隐式的Object Initializer,就像在C#中一样吗?

    在C#中,我们有对象初始化器,像这样:Swift有这个吗?例如,我有这个代码:但是想做以下一些事情:谢谢!

  4. android – 以编程方式捕获网络流量(无根)

    我正在尝试查找资源或库,这些资源或库可以允许我以编程方式捕获设备的所有网络数据包的流量,无论是来自wifi还是移动网络.我相信没有必要成为sharkforroot会请求这种混杂模式的root用户,因为Play商店有thisapp可以捕获所有网络流量而不需要root.我根本无法弄清楚如何做同样的事情.我的问题是:这个应用程序是如何实现此捕获的?

  5. 在Android N预览中不允许使用Cleartext到myserver.com的HTTP流量

    昨天我获得了AndroidN预览的新升级.自从我升级以来,我再也无法启动我的应用了.我试图在清单中将usesCleartextTraffic设置为true或添加network_security_config.xml也没有工作.关于那里发生了什么的任何想法?当我尝试在清单中定义networkSecurityConfig时,我收到编译错误不太确定为什么.文件在那里,一切看起来都不错.在Google的A

  6. 如何在Android应用程序中监控并获取http流量?

    我想知道有没有办法在android中拦截/监控http流量.我能想到的一种方法是在android的浏览器源代码中安装自定义模块,以便所有流量通过它.请引导我到相关的选择.另外,我们如何实施自定义模块,任何指导方针?解决方法如果您知道浏览器PID,则可以使用getUidRxBytes()获取TrafficStats

  7. 如何在Android上捕获应用流量

    我正在尝试从Android手机上的应用程序捕获流量,虽然我已经在手机上设置代理并且可以捕获来自手机的所有其他互联网流量,但我看不到任何流量这个应用程序.这是怎么做的,我如何捕获流量?它将捕获所有流量..它将生成转储文件,可以使用Wireshark软件在您的PC上进行分析>最好的方法:将您的PC设置为wifi接入点,并使您的Android设备使用此wifi连接,然后使用相同的Wireshark应用程序嗅探流量.

  8. Android的C#版本的Console.WriteLine?

    在Android中,写入控制台的最佳方式是什么.在C#中,我使用Log4Net或只使用Console.Write解决方法查看Android.Util.Log的帮助页面.您可以使用:

  9. Android上的C#:Xamarin或Unity?

    还是有其他解决方案?

  10. PHP系统流量分析的程序

    >createtablestream(iptext,sTimeint,visitsint,infotext);

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部