首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Windows中挂钩TCP堆栈来嗅探和修改数据包?

在Windows中挂钩TCP堆栈来嗅探和修改数据包,可以使用Windows Filtering Platform (WFP)。WFP是一个内置于Windows操作系统的网络驱动程序接口 (NDIS) 过滤器驱动程序,它允许开发人员编写用户模式应用程序或内核模式驱动程序来拦截和修改网络流量。

以下是使用WFP挂钩TCP堆栈的步骤:

  1. 创建一个用户模式应用程序或内核模式驱动程序。
  2. 在应用程序或驱动程序中,使用Windows Filtering Platform API注册一个回调函数。回调函数将在每个网络数据包到达或离开系统时被调用。
  3. 在回调函数中,检查数据包是否为TCP数据包,并对其进行嗅探和修改。
  4. 使用Windows Filtering Platform API将修改后的数据包注入回系统。

以下是一个简单的示例代码,用于在用户模式应用程序中使用WFP挂钩TCP堆栈:

代码语言:csharp
复制
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Win32.SafeHandles;

namespace WfpExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 注册回调函数
            var filter = new FWPM_CALLOUT0
            {
                calloutKey = Guid.NewGuid(),
                displayData = new FWPM_DISPLAY_DATA0
                {
                    name = "Example Callout"
                },
                flags = FWPM_CALLOUT_FLAG.FWPM_CALLOUT_FLAG_PERSISTENT,
                providerKey = Guid.Empty,
                applicableLayer = FWPM_LAYER.FWPM_LAYER_ALE_AUTH_CONNECT_V4
            };

            var filterHandle = IntPtr.Zero;
            var filterEnumHandle = IntPtr.Zero;
            var sessionHandle = IntPtr.Zero;

            try
            {
                // 创建会话
                var session = new FWPM_SESSION0
                {
                    flags = FWPM_SESSION_FLAG.FWPM_SESSION_FLAG_DYNAMIC
                };

                var sessionHandle = IntPtr.Zero;
                var result = FwpmEngineOpen0(ref session, out sessionHandle);
                if (result != 0)
                {
                    throw new Win32Exception(result);
                }

                // 添加回调函数
                result = FwpmCalloutAdd0(sessionHandle, ref filter, out filterHandle);
                if (result != 0)
                {
                    throw new Win32Exception(result);
                }

                // 枚举回调函数
                result = FwpmCalloutCreateEnumHandle0(sessionHandle, ref filterEnumHandle);
                if (result != 0)
                {
                    throw new Win32Exception(result);
                }

                // 启动网络监听
                var socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
                socket.Bind(new IPEndPoint(IPAddress.Any, 0));

                var buffer = new byte[4096];
                while (true)
                {
                    var received = socket.Receive(buffer);
                    var packet = new IPPacket(buffer, received);

                    // 在这里嗅探和修改数据包

                    socket.Send(packet.GetBytes());
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                // 删除回调函数
                if (filterHandle != IntPtr.Zero)
                {
                    FwpmCalloutDeleteById0(sessionHandle, filter.calloutKey);
                }

                // 关闭会话
                if (sessionHandle != IntPtr.Zero)
                {
                    FwpmEngineClose0(sessionHandle);
                }
            }
        }

        [DllImport("Fwpuclnt.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int FwpmEngineOpen0(ref FWPM_SESSION0 session, out IntPtr sessionHandle);

        [DllImport("Fwpuclnt.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int FwpmEngineClose0(IntPtr sessionHandle);

        [DllImport("Fwpuclnt.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int FwpmCalloutAdd0(IntPtr sessionHandle, ref FWPM_CALLOUT0 callout, out IntPtr calloutHandle);

        [DllImport("Fwpuclnt.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int FwpmCalloutDeleteById0(IntPtr sessionHandle, Guid calloutKey);

        [DllImport("Fwpuclnt.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int FwpmCalloutCreateEnumHandle0(IntPtr sessionHandle, ref IntPtr enumHandle, out IntPtr enumHandle);
    }
}

在这个示例中,我们使用WFP API创建了一个用户模式应用程序,并在其中注册了一个回调函数。然后,我们使用原始套接字创建了一个网络监听器,并在其中

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《Python黑帽子》:原始套接字流量

通过网络,我们可以捕获目标机器接收发送的数据包。因此,流量在渗透攻击之前或之后的各个阶段都有许多实际用途。...通过TCP UDP 发送接收数据包,按理说,这应该是我们与绝大部分网络服务进行交互的方式,但在这些高层协议之下,网络数据包的发送接收还涉及一些底层的知识。...Windows Linux 上的包Windows Linux 上访问原始套接字有些许不同,但我们更中意于在多平台部署同样的器以实现更大的灵活性。...在第一个例子,我们只需设置原始套接字器,读取一个数据包,然后退出即可。 首先,我们通过构建套接字对象对网络接口上的数据包进行必要的参数设置①。...Windows Linux 的区别是Windows 允许我们所有协议的所有数据包,但Linux 只能到ICMP 数据。

1.3K20

kali的Ettercap(0.8.3.1)GUI界面中文化

你需要修改IP地址来回应这查询通过修改etter.dns文件。插件将拦截A,PTRMX请求。如果它是一个A请求,返回IP地址。...其他一些插件(greu-relay)需要一个未使用的局域网IP地址创建一个“假”主机。在没有dhcp服务器的未知LAN获取IP地址也很有用。...PS:目前我不太懂 gw_discover 该插件通过尝试向远程主机发送 TCP SYN 数据包发现 LAN 的网关。该数据包具有远程主机的目标 IP 本地主机的目标 mac 地址。...它至少需要主机列表的一项才能执行检查。使用两个或更多主机时,会更准确。...某些开关在重复模式下会跳过,便于。每个数据包之间的延迟基于 etter.conf 的 port_steal_send_delay 值。 它仅在以太网交换机上有用。

1.3K20
  • ettercap的使用帮助文档 官方man page的个人理解

    如果到的数据包不是ettercap主机的就自动用第3层路由转发。所以,你可以用不同的工具作中间人攻击(MITM)转发修改过的数据包。...:可以到账户密码,包括SSH1连接的数据,ettercap是第一款在全双工通信中的软件。...,此攻击行为的目的在于劫持数据包重定向数据包,如果有必要,引擎将转发这些数据包。...ARP缓存中毒受害者的所有数据包都会发送给攻击者,反之可以修改收到的数据包重定向数据包的目标地址。...-w, –write (把到的数据写到文件) 把到的数据包保存为pcap文件 如果要分析局域网arp投毒的数据包,你可以把这些数据包保存到一个文件,再用tcpdump或者

    1.3K20

    75个最佳网络安全工具,有你认识的么?

    借助这个程序,你既可以直接从网络上抓取数据进行分析,也可以对由其 他器抓取后保存在硬盘上的数据进行分析。 你能交互式地浏览抓取到的数据包,查看每一个数据包的摘要和详细信息。...平台: Linux/BSD/Unix/Windows 简介: Tcpdump是一款众人皆知受人喜欢的基于命令行的网络数据包分析工具。...是一款802.11b网络分析程序,功能有: 支持大多数无线网卡,能通过UDP、ARP、DHCP数据包自动实现网络IP阻塞检 测,能通过Cisco Discovery协议列出Cisco设备,弱加密数据包记录...它监视无线网络的传输数据,当收集到足够多的数据包时就能计算出密钥。...它当前能够识别流经以太网、PPP、 SLIP、FDDI、令牌网回环设备上的TCP、UDPICMP数据包,并且其他常见的工具(tcpdumpsnoop)一样,理解bpf 过滤机制。

    23611

    Python3实现ICMP远控后门()之“”黑科技

    本次讲的是,为什么要讲呢?ICMP后门有什么关系呢?本篇的干货有点多。。。 ?...对于TCPUDP后门来说,正向反向连接是有很大区别的,反向连接的目的之一就是为了规避正向连接时防火墙拦截端口绑定的问题。下面先讲一下正向连接反向连接的概念。...windowslinux平台ICMP的方式编程内容差距有点大,linux相对简单。 windows平台ICMP 以ICMP数据包为例,代码如下,请详细看注释哈。...在windows,需要我们将网卡设置为混杂模式,这样就可以接受到所有经过本网卡的数据包。至于混杂模式的解释,百度百科中有。 ?...Linux平台 ICMP ICMP数据包,代码如下,请详细看注释哈。

    1.3K70

    网络协议分析复习

    网络地图,又称网络拓扑图,是指用传输媒体互连各种设备的物理布局 确定数据包器的安装位置,在故障排除分析中有重要作用 29、数据包探过程涉及到软件硬件之间的协作。...加密密钥如何在通信双方之间进行传输? 数据格式:通信数据在数据包如何排列?数据到达接收设备时以什么样的顺序进行处理? 错误检测与校正:当数据包花了太长的时间才到达目的地时如何处理?...支持的协议:数据包器对协议解析的支持范围各不相同,大部分通常都能解析常见的网络协议(IPv4ICMP)、传输层协议(TCPUDP),甚至一些应用层协议(DNSHTTP)。...使用者贡献者社区会提供一些讨论区、维基、博客,帮助你获得更多关于数据包器的使用方法。 操作系统支持:遗憾的是,并不是所有的数据包器都支持所有的操作系统平台。...你需要选择一款器,能够支持所有你将要使用的操作系统。如果你是一位顾问,你可能需要在大多数操作系统平台上进行数据包捕获分析,那么你就需要一款能够在大多数操作系统平台上运行的器。

    65440

    常见黑客渗透测试工具

    可运行linux/UNIXWin,snort有三种工作模式:器、数据包记录器、网络入侵检测系统。 器模式是snort从网络上读出数据包然后显示控制台上。...二八、Scapy Scapy是一款强大的交互式数据包处理工具、数据包生成器、网络扫描器、网络发现工具工具。...它提供多种类别的交互式生成数据包数据包集合、对数据包进行操作、发送数据包、包、应答反馈匹配等等功能。...EhterealTcpdump都依赖于pcap库(libpcap),因此两者在许多方面非常相似(都使用相同的过滤规则关键字)。Ethereal其它图形化的网络器都使用相同的。...在linux系统下arpwatch可监听区域网络ARP数据包并记录,同时将监听到的变化通过E-mail报告。 五五、KisMAC 一款免费的无线协议程序,可用于Mac OX操作系统。

    2.8K31

    新手指南:如何用Ettercap实现“中间人攻击”

    Ettercap支持插件,可以通过添加新的插件扩展功能。 功能 Ettercap支持对许多协议(包括加密协议)的主动被动分离,并具有网络主机分析方面的多项功能。...Ettercap包含四种操作模式: 基于IP的模式:根据IP源目的地过滤数据包 基于MAC的模式:根据MAC地址过滤数据包,该模式能够对通过网关的连接起到作用。...SSH1支持:用户名密码,甚至是SSH1连接的数据。Ettercap是第一个能够以全双工方式SSH连接的软件。.../丢弃:设置一个过滤器,用于在TCP或UDP有效内容查找特定字符串(或十六进制序列),并用自定义字符串/序列替换它,或丢弃整个数据包。...不支持的操作系统(以下发行版能够安装但不支持,可能需要其它用于代码编译使用的设置):OpenSuSe、Solaris、Windows Vista、Windows 7、Windows 8。

    2.3K70

    计算机端口的安全知识大全,整的明明白白!

    在Internet上,各主机间通过TCP/IP协议发送接收数据包,各个数据包根据其目的主机的IP地址进行互联网络的路由选择,把数据包顺利传送到目的主机。...我以WINDOWS操作系统自带的防火墙第三方防火墙为例介绍如何通过防火墙关闭端口,还以3389为例: 利用WINDOWS系统自带的防火墙 WIN7/8:打开控制面板—>系统安全—>windows...23端口 telnet是一种旧的远程管理方式,使用telnet工具登录系统过程,网络上传输的用户密码都是以明文方式传送的,黑客可使用技术截获到此类密码。...(4)普通的http封包是没有经过加密就在网络传输的,这样就可通过类工具截取到敏感的数据。使用Cain工具完成此类渗透。...(2)cain同样支持对VNC的,同时支持端口修改。 (3)VNC的配置信息同样被写入注册表系统,其中包括连接的密码端口。利用webshell的注册表读取功能进行读取加密算法,然后破解。

    8.1K21

    关于无线网络 (一)

    网络 每张网卡都有自己全球唯一的地址(MAC地址,12字节),正常情况下网卡只接收发送给自己的数据包数据包前12字节就是数据包的目标MAC地址),及广播地址(MAC地址为12个F)。...而无线网卡的原理: 无线网卡是只有当网卡与无线网络建立连接以后,才会返回数据包给主机。如果网卡没有建立连接,只会显示接收到的广播帧。...如何在Windows无线网络 由于windows操作系统原因,目前打开无线网卡混杂模式都在Linux操作系统(backtrack)下进行。...下一篇文章我会说下,如何使用普通网卡实现在windows操作系统的功能(只是换个驱动软件),甚至使用微软自己的软件实现无线网络功能。...蹭网卡 蹭网卡只是普通的网卡芯片(支持模式)加上功率放大器而已。 市面上流行的蹭网卡芯片主要使用 雷凌3070RTL8187 两种芯片。 注意RTL8187不支持802.11n协议。

    2.2K10

    Python黑客编程3网络数据监听过滤

    对于数据包的分析,新手可能会感到迷茫,如何选择合适的协议和方法分析呢?这个问题的答案不在代码,而在于网络通信协议本身的掌握理解。...回到上面的代码,我们想要分析http请求的数据,http是应用层协议,通过TCP协议传输数据,那么TCP数据又被封装在IP数据报文中。...ls()函数的参数还可以是上面支持的协议的任意一个的类型属性,也可以是任何一个具体的数据包ls(TCP),ls(newpacket)等。 ? lsc()列出scapy支持的所有的命令。 ?...1.4.4 综合实例--net-creds net-creds是一个小的开源程序,由python编写,主要是从网络或者pcap敏感数据。...: sudo python net-creds.py 指定的网卡: sudo python net-creds.py -i eth0 忽略指定IP的数据包: sudo python net-creds.py

    4.6K30

    《网络攻击与防御技术》学习笔记

    被动扫描 与目标机建立正常连接,发送的数据包也属于正常范畴,被动扫描不会向受害主机发送大规模的探测数据,因此防范方法较难,目前只能采用信息欺骗方法 防火墙技术 审计技术 第四章 网络与防御 监听的概念...处理时间、存储空间以及网络带宽等 DoS最本质的特征是延长服务等待时间,使用户无法忍受而放弃服务 拒绝服务攻击的基本模式 资源消耗型 消耗网络带宽 消耗磁盘空间 消耗CPU内存资源 配置修改型:破坏系统的配置信息...一旦发送过来的ICMP数据包超过64KB, 操作系统将收到的数据报文向缓存区填写时,就会产生一个缓存溢出,引起内存访问错误,导致TCP/IP协议堆栈崩溃,造成主机的重启动或者死机。...是一种在他方未察觉的情况下捕获其通信报文或通信内容的技术 网络技术的能力范围只限于局域网,主机可以接收到本网段在同一条物理通道上传输的所有信息,而不管这些的发送方接收方是谁 的技术 共享式局域网的监听技术...通过混杂模式到的数据包上传到网络层后,网络层处理程序还要对其目的IP进行判断,如果不是本地IP,丢弃 所以,如果没有一个特定的机制,上层应用也无法抓到不属于自己的数据包 共享式网络监听的原理

    1.3K41

    python scapy的用法之ARP主

    python scapy的用法之ARP主机扫描ARP欺骗  目录: 1.scapy介绍 2.安装scapy 3.scapy常用 4.ARP主机扫描 5.ARP欺骗 一、scapy介绍 scapy是一个可用于网络的非常强大的第三方库...2.可以用开做packet伪造packet   3.已经再内部实现了大量的网络协议。(DNS,ARP,IP,TCP,UDP等等),可以用它编写非常灵活实用的工具。...三、scapy常用 1.流量包 sniff函数进行流量,iface表示使用的网卡接口,filter是过滤条件,count是包的个数。结果显示到了3个ARP包。...2.将到的包内容写到pcap文件读取pcap文件。 wrpcap写,rdpcap读 ? 3.收发数据包 3.1、send(),在第三层发送数据包,但没有接收功能。...,srp同时收到响应数据包不响应数据包,需要用两个变量来接收。

    3K20

    网络侦察技术分类综述

    攻击者可以利用被动分析技术(如数据包获取网络拓扑并发现系统架构、协议映射可利用漏洞,进一步利用漏洞突破其他主机,以更接近目标资源。...基于系统的侦察技术主要指通过本地(本地主机发现)或远程(网络扫描)与目标系统网络直接交互获取信息。 图4....该文根据侦察相对于目标网络的发生位置,分为远程系统侦察,如在网络中远程执行扫描本地系统侦察,通过读取文件内容或使用操作系统命令探索配置发现受害主机。...旁路捕获间接交互的技术 技术,是指通过旁路捕获分析网络数据包,与目标系统间接交互的方式,搜集用户凭据等信息。...如图8所示,分为被动主动,被动通过直接捕获数据包发现网络协议和服务、存活主机端口(Wireshark/Tcpdump等流量抓包分析工具),主动利用流量泛洪或欺骗攻击,捕获流量或将流量重定向到攻击者控制的主机

    50630

    raw socket是啥(一)?

    对于网络通讯,耳熟能详的莫过于TCP、UDP,二者皆需要ipport。...在发送数据之前,它被包装在网络层的各种headers。数据的包装形式包含源地址目标地址等所有信息,称为网络数据包(参见图 3)。...根据以太网协议,有多种类型的网络数据包Internet协议数据包、Xerox PUP数据包、以太网环回数据包等。...如果我们对不同网络层的标头的内容或结构感兴趣,我们可以借助数据包器来访问它们。有多种适用于 Linux 的数据包器,例如 Wireshark。...有一个名为tcpdump 的命令行器,它也是一个非常好的数据包器。如果我们想制作自己的数据包器,如果我们了解 C 语言和网络基础知识,就可以轻松完成。

    1.3K40

    最强linux抓包工具优劣势对比分析

    核心参数 参数名称 说明 -d 指定网络接口 -i 指定数据包文件 -w 输出数据包到文件 -n 不执行DNS反向解析 -p 指定协议 -m 指定目标主机 -f 指定过滤规则 -s 指定抓取数据包的数量...FTP流量 sudo dsniff -m target_host -p ftp # 指定目标主机的所有流量 sudo dsniff -m target_host # 指定数据包文件的HTTP...请求 sudo dsniff -i input.pcap -p http # 指定数据包文件的所有流量 sudo dsniff -i input.pcap # 指定端口的流量 sudo dsniff...-f "tcp port 80" # 指定数量的流量并输出详细信息 sudo dsniff -s 100 -v # 指定目标主机的SMTP流量并输出到文件 sudo dsniff -m target_host...- 文档社区支持相对较少- 对于复杂的协议需要手动解析 6 dsniff - 支持多种协议- 可以实时监控流量- 支持密码- 在LinuxUnix系统自带 - 不支持图形化界面- 对于某些高级协议的支持不够完善

    51220
    领券