抓包程序(C++版本)

合集下载

Linux-C-网卡抓包程序的实现

Linux-C-网卡抓包程序的实现

目录一、课程设计目的 (2)二、开发环境、运行方式 (5)1、开发环境 (5)2、运行方式 (5)3、测试结果截图 (6)三、流程的说明 (8)四、帧封装的过程 (10)1、填充帧头部字段 (10)2、填充数据字段 (10)3、CRC校验 (10)4、主程序设计 (12)五、帧封装方法的相关扩展 (21)1、比特型算法 (22)2、字节型算法 (22)六、课程设计心得与体会 (23)七、参考文献 (23)一、课程设计目的帧是网络通信的基本传输单元,熟悉帧结构对于理解网络协议的概念、协议执行过程以及网络层次结构具有重要的意义。

本次作业的目的是应用数据链路层与介质访问控制子层的知识,根据数据链路层的基本原理,通过封装和解析Ethernet 帧,了解Ethernet 帧结构中各个字段的含义,从而深入理解Internet 协议族中的最底层协议——数据链路层协议。

网络节点间发送数据都要将它放在帧的有效部分,分为一个或多个帧进行传送。

节点之间可靠的帧传输不仅是通信的保障,而且还可以实现网络控制等各种功能。

1980年,Xerox、DEC与Intel等三家公司合作,第一次公布了Ethernet的物理层、数据链路层规范;1981年Ethernet V2.0规范公布;IEEE 802.3 标准是在Ethernet V2.0规范的基础上制定的,IEEE 802.3针对整个CSMA/CD网络,它的制定推动了Ethernet 技术的发展和广泛应用。

Ethernet V2.0规范和IEEE802.3标准中的Ethernet帧结构有一些差别,这里我们按Ethernet V2.0的帧结构进行讨论。

图 1.1 IEEE802.3标准Ethernet帧结构802.3标准中Ethernet帧结构由以下几个部分组成:(1)前导码和帧前定界符前导码由56位(7Byte)的10101010…1010比特序列组成,帧前定界符由一个8位的字节组成,其比特序列位10101011。

c_写的抓包

c_写的抓包

C#类实现抓包用C#的RawSocket实现网络封包监视谈起socket编程,大家也许会想起QQ和IE,没错。

还有许多网络工具如P2P、NetMeetin g等在应用层实现的应用程序,也是用socket来实现的。

Socket是一个网络编程接口,实现于网络应用层,Windows Socket包括了一套系统组件,充分利用了Microsoft Windows 消息驱动的特点。

Socket规范1.1版是在1993年1月发行的,并广泛用于此后出现的Windo ws9x操作系统中。

Socket规范2.2版(其在Windows平台上的版本是Winsock2.2,也叫W insock2)在1996 年5 月发行,Windows NT 5.0及以后版本的Windows系统支持Winso ck2,在Winsock2中,支持多个传输协议的原始套接字,重叠I/O模型、服务质量控制等。

本文向大家介绍Windows Sockets的一些关于用C#实现的原始套接字(Raw Socket)的编程,以及在此基础上实现的网络封包监视技术。

同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本机的IP包,通过原始套接字,我们也可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。

在本文例子中,我在nbyte.BasicClass命名空间实现了RawSocket类,它包含了我们实现数据包监视的核心技术。

在实现这个类之前,需要先写一个IP头结构,来暂时存放一些有关网络封包的信息:[StructLayout(LayoutKind.Explicit)]public struct IPHeader{[FieldOffset(0)] public byte ip_verlen; //I4位首部长度+4位IP版本号[FieldOffset(1)] public byte ip_tos; //8位服务类型TOS[FieldOffset(2)] public ushort ip_totallength; //16位数据包总长度(字节)[FieldOffset(4)] public ushort ip_id; //16位标识[FieldOffset(6)] public ushort ip_offset; //3位标志位[FieldOffset(8)] public byte ip_ttl; //8位生存时间TTL[FieldOffset(9)] public byte ip_protocol; //8位协议(TCP, UDP, ICMP, Etc.)[FieldOffset(10)] public ushort ip_checksum; //16位IP首部校验和[FieldOffset(12)] public uint ip_srcaddr; //32位源IP地址[FieldOffset(16)] public uint ip_destaddr; //32位目的IP地址}这样,当每一个封包到达时候,可以用强制类型转化把包中的数据流转化为一个个IP Header对象。

VC3064局域网抓包软件的设计与实现2

VC3064局域网抓包软件的设计与实现2

局域网抓包软件的设计与实现摘要随着网络技术的不断发展,社会进入了一个信息爆炸的时代,世界也由于网络而变小,人们通过各种技术和工具使交流突破了空间的限制。

在网络技术发展与普及的同时,网络安全问题引起了人们的广泛关注。

因此,研究并开发出一种能够有效地实时捕获网络信息的系统具有极其重要的意义。

基于这一情况,本论文针对网络数据的捕获与数据包信息分析等问题进行了深入的探讨和研究。

本论文逐一介绍了信息捕获中的相关技术及需求分析,在系统设计中对数据包捕获模块、解码数据包模块和数据库信息模块的实现进行了详细讲述。

通过运用WinPcap 开发包实现网络数据包的捕获,利用TCP/IP 协议的封装理论和自下而上的分析实现了数据包信息的分析,并且将分析出来的信息存入数据库。

另外,还能实现一些功能,如对指定的IP地址进行数据包的捕获,对捕获结果进行显示等。

关键词:WinPcap;数据捕获;信息分析;局域网1局域网信息捕获器的设计1.1功能概述通过前面的叙述可以知道,这款软件具有的功能,那就是:能够分别捕获局域网中的TCP协议类型数据,UDP协议类型数据和从某一特定的IP地址发送出来的TCP协议类型数据和UDP协议数据类型。

并且,将这些捕获出来的数据包的基本信息存入到数据库中,提供给网络管理员使用和进一步的分析。

系统流程图如下图:图10 系统流程图本系统包括三个基本模块,分别是数据包捕获模块,数据分析模块和数据库模块。

其中数据包捕获模块的功能是:利用Winpcap控件,通过网卡设备从网络中捕获数据包;数据分析模块的功能是:主要实现数据的解析,从网络适配器中捕获到的数据的为原始数据(raw data),这些原始数据为二进制格式,必须转化为能比较好明白的格式,这就要求将这些原始数据能按照网络数据传输的具体格式来保存,主要为了能较好的读懂相关的信息,以便使用者分析;数据库模块的功能是:经过前两个模块处理后的数据,现在已经转化成了对我们有用的信息了,而这些信息不可能一直让他存放在内存中,那么就需要在数据库中建立相应的表,把这些信息存贮在这些数据库表的相应列名中,以便使用者处理、使用。

Fiddler抓包(浏览器网页抓包、手机端App抓包、PC客户端(CS)抓包)

Fiddler抓包(浏览器网页抓包、手机端App抓包、PC客户端(CS)抓包)

Fiddler抓包(浏览器⽹页抓包、⼿机端App抓包、PC客户端(CS)抓包)开篇:要想实现写爬⾍,抓取到数据,⾸先我们应该分析客户端和服务器的请求/响应,前提就是我们能监控到客户端是如何与服务器交互的,下⾯来记录下常见的三种情况下的抓包⽅法1.PC端浏览器⽹页抓包⽹页板抓包是最简单和常见的,⽐如Google/Firfox/IE等浏览器⾃带的开发者调试⼯具(F12)就可以满⾜⼀部分需求,如果在请求前和响应后最些处理,⽐如修改浏览器发出的请求数据和修改服务器相应的数据,⽤F12开发这⼯具,就不能满⾜我们的需求,这⾥我们引⼊Fiddler 抓包⼯具,可以理解为本地的代理服务器,实现转发客户端和服务器的请求和响应设置Fiddler:打开Fiddler,在菜单栏,打开Tools --Options,前三个选项卡设置下,OK,默认的代理设置:127.0.0.1:8888然后在浏览器端设置代理:127.0.0.1:8888,可抓取到⽹页请求/响应,后续可以按需要在Fiddler端实现需求,⽐如:设置断点,过滤请求,修改请求数据,修改响应数据,截获JS等2.⼿机端App抓包⼿机端App抓包⽤Fiddler同样很简单,和上⾯PC浏览器抓包⽅式差不多,⼿机端要和PC在同⼀个局域⽹,⼿机Wifi设置代理,IP是PC机器的IP地址,⽐如:64.35.86.12,端⼝号是FIddler设置的端⼝号,⼀般都是8888,这样⼿机端的所有⽹络/响应请求都要经过FIddler抓发,这样我们就可以针对某些链接做分析3.PC客户端(C/S)抓包C/S程序抓包需要借助ProxiferProxifier是⼀款功能⾮常强⼤的socks5客户端,可以让不⽀持通过代理服务器⼯作的⽹络程序能通过HTTPS或SOCKS代理或代理链。

由于⼀般的C/S客户端不能设置代理,所以我们FIddler检测不到数据,我们可以通过Proxifer来实现把所有的请求抓发给Fiddler,这样我们就可以在Fiddler分析客户端请求。

C#实现抓包的实例代码

C#实现抓包的实例代码

C#实现抓包的实例代码⼯具:SharpPcap 4.2.0vs⼯程:控制台应⽤程序关于C#抓包,我只找到SharpPcap 这个dll,相关的资料不多,⽽且都是挺⽼的,所以就顺⼿记⼀下⾃⼰的代码,给有同样需求的⼈⼀个参考吧。

当然,代码可能存在问题,请见谅。

⼀、获取连接设备// 获取连接列表CaptureDeviceList devices = CaptureDeviceList.Instance;// ⽆连接if (devices.Count < 1){Console.WriteLine("No devices were found on this machine");return;}Console.WriteLine("\n以下为本机连接:");Console.WriteLine("--------------\n");int j=0;string temp = "";Regex r = new Regex("FriendlyName: .*\n"); //匹配连接的FriendlyNameMatch m;// 打印连接设备foreach (ICaptureDevice dev in devices){temp = dev.ToString();m = r.Match(temp);Console.WriteLine("{0}:{1}\n", j++, m.ToString());}Console.Write("输⼊设备号");string input = Console.ReadLine();int i = 0;try{i = Int32.Parse(input);}catch (Exception e){Console.WriteLine("⾮法输⼊!"+e.Message);return;}if (devices.Count < 1 || i == -1){Console.WriteLine("变量⾮法!");return;}// 得到指定连接设备ICaptureDevice device = devices[i];⼆、打开连接// 定义“包到达”事件device.OnPacketArrival +=new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival);// 打开连接int readTimeoutMilliseconds = 1000;device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);三、设置过滤// 设置仅获取⽬标端⼝为1234的tcp包string filter = "tcp dst port 1234";device.Filter = filter;四、开始获取// 开始⽆限期捕获包device.Capture();五、包处理⽅法private static void device_OnPacketArrival(object sender, CaptureEventArgs e){//获取以太⽹(Ethernet)的帧var ent = PacketDotNet.EthernetPacket.ParsePacket(LinkLayers.Ethernet, e.Packet.Data);//获取ip包var ip = ent.PayloadPacket;//获取tcp包var tcp = ip.PayloadPacket;//格式化tcp包,可直接读取tcp包中的相应值var tcp_packet = new TcpPacket(new ByteArraySegment(tcp.Bytes));if (tcp != null){DateTime time = e.Packet.Timeval.Date;if (tcp.PayloadData != null){//根据需要,获取tcp的data数据string str = BitConverter.ToString(tcp.PayloadData);/**其他数据处理**/}}}六、技术有限,只做到这样的程度以上就是C# 实现抓包的实例代码的详细内容,更多关于C# 抓包的资料请关注其它相关⽂章!。

一个Windows进程抓包器的C++实现

一个Windows进程抓包器的C++实现
让 目标 进程 按 照设定 的程 序来 运行 “ 。 于一 个经 ]对 过加 密 的进 程 数据 包 , 目前 互联 网 上 的软 件并 不 能 截 取 到进程 的 明文数 据包 。 文通过 对 Wid ws 本 n o 进
维普资讯
广 西 科 学 院 学 报
J u n l fGu n x a e f ce cs o r a o a g i Acd myo in e S
2 0 ,34 :6 ~2 9 0 72 () 2 6 6 V o . 3, o Nov m b r 2 7 1 2 N .4 e e 00
p o r mmiga d s o o t r g a t ep o esp c ec p u eb a igt ee a l o o rga n n h wsh w Op o r m h r cs a k ta t r yt kn h x mpe fh w
Wid ws 一 个 开放 的系 统 , 个 进 程 可 以对 no 是 一 其 它进 程进 行控制 , 括 内存 的访 问和读 取 、 包 虚拟 内
l 进 程 抓 包 器 的实 现 过 程 [ 。 ]
抓包 器实 现 的 目的为 了查 看 和 了解 进程 中数据
包 的 内容 和 结 构 , 的 实 现 主 要 是 通 过 C+ + 的 它 A I P 函数 实现 。实现 抓包器 的主要过 程如 下 。
存 的控 制 、 系统权 限的 控制等 , 至可 以调试其 它 进 甚
( ) 目标进 程 的窗 口中再 生成 一个 窗 口 , 1在 实现
“ 注入 ” 目标 进 程 的 内部 口用 于 显示 截 取 到 的数 窗 据包 内容 。“ 注入 ” 的操 作就 是把 一个模 块 或者 自己 编写 功能代 码段潜 入 到 目标 进程 中去 。“ 入 ” 注 的方

抓包操作流程

抓包操作流程

抓包操作流程抓包操作流程是网络分析和网络故障排查中必不可少的一环,在网络管理员、网络安全专业人员、开发人员等领域具有广泛的应用。

本文将从以下三个方面介绍抓包操作流程——第一、准备工作1.1、安装抓包软件:需要安装类似Wireshark、tcpdump、Fiddler等抓包软件,这些软件都是开源、免费的。

1.2、了解所监控的网络环境,包括网络拓扑、网络设备的配置等信息,这可以帮助我们更好的分析和理解网络流量。

1.3、根据需要,配置好抓包软件的过滤器,过滤掉那些不需要的数据包,提高流量质量。

第二、开始抓包2.1、启动抓包软件,并开始进行抓包操作。

一般情况下,我们都需要知道所关注的设备或IP地址,以及设备或IP地址与其他设备或IP地址之间的通信流程。

为了实现这一目标,我们可以通过设置过滤器,只抓取满足条件的数据包,如以下三个过滤器:tcp.port == 80:仅抓取TCP协议下端口为80的数据包,一般情况下它是用来传输HTTP协议的数据。

ip.src == 10.0.0.1:仅抓取来源IP地址为10.0.0.1的数据包,通过这个过滤器可以查看该IP地址与其他设备之间的通信流程。

2.2、停止抓包并保存数据。

在已经完成了必要的抓包操作后,我们需要停止抓包,并将抓取下来的数据保存到本地,以便我们后期的分析和处理。

第三、数据分析3.1、打开抓包软件中已经保存的数据文件,进入数据分析模式。

3.2、清晰地展示数据包的详细信息,如协议、源地址、目的地址、源端口、目标端口、数据长度等信息,以便我们在学习分析时进行参考。

3.3、跟踪数据包的传输流程,在网络环境中分析数据的各种代表性事件,如连接、请求、回复、响应等事件,以便我们更好地理解和分析故障原因。

3.4、综合分析,利用各种分析工具对数据进行统计和分析,以便我们更好地分析数据的其他特征,如分析三次握手流程、分析传输性能等等。

3.5、通过分析得到的数据,我们可以更好地了解网络端到端性能,以便监控和诊断网络故障。

charles抓包教程

charles抓包教程

charles抓包教程Charles抓包教程:1. 首先,下载并安装Charles抓包工具。

可以在官方网站或者第三方下载平台找到合适的版本,并按照安装向导进行安装。

2. 打开Charles工具,在主界面上方的工具栏中,点击"Proxy",然后选择"Proxy Settings",在弹出的窗口中确认默认端口号为8888,并记下当前使用的IP地址。

3. 在手机或者其他设备上设置代理,将代理服务器地址设置为上一步中记下的IP地址,端口号为8888。

具体设置方法可以参考设备的操作系统,通常可以在无线网络设置中找到相关选项。

4. 检查代理设置是否成功,打开浏览器并访问任意网页,在Charles工具中会自动显示出相关请求和响应信息,表示代理已经生效。

5. 开始抓包。

在Charles主界面上方的工具栏中,点击"Record"按钮,将其置为选中状态。

此时,Charles会记录所有经过代理的网络请求和响应。

6. 在设备上进行需要抓包的操作,比如打开某个应用程序或者访问某个网页。

Charles会在请求发出和响应返回时捕捉相关数据,并在主界面中显示出来。

7. 分析抓包结果。

在Charles主界面中,可以通过过滤器或者搜索等功能找到特定的请求或者响应。

可以查看请求的URL、请求头、请求体等详细信息,也可以查看响应的状态码、响应头、响应体等内容。

8. 可以对抓包结果进行一些操作,比如保存请求或者响应数据,重发请求,修改请求或者响应等等。

9. 当完成抓包分析后,可以点击工具栏中的"Stop Recording"按钮,停止抓包记录。

10. 最后,根据自己的需求和目的,可以将抓包结果导出或者分享给其他人,也可以对抓包工具进行设置和优化。

注意:在使用Charles进行抓包时,请遵守相关法律法规和道德规范,合法使用该工具,不要盗取他人的隐私信息或者进行其他不正当的行为。

capture - c方法

capture - c方法

capture-c方法
"capture-c"是一个网络抓包工具中的命令行选项,通常用于使用tcpdump命令进行网络流量捕获。

下面是关于这个选项的简要说明:
1.抓包工具:`capture-c`常常是指通过命令行工具`tcpdump`来进行网络抓包操作。

`tcpdump`是一个在类Unix系统中非常流行的抓包工具,用于捕获和分析网络数据包。

2.选项说明:
-`-c`选项用于指定要捕获的数据包数量。

例如,`tcpdump-c100`表示只捕获前100个数据包,然后就停止捕获。

3.示例:
-下面是一个简单的示例,使用`tcpdump-c`来捕获前5个数据包,并显示它们的内容:
```bash
tcpdump-c5
```
这将捕获并显示前5个经过网络接口的数据包。

4.注意事项:
-`-c`选项的作用是为了限制捕获的数据包数量,以避免生成过大的输出文件。

在某些情况下,你可能只对网络中的一小部分数据包感兴趣。

请注意,具体的命令行选项和语法可能会因所使用的抓包工具版本而有所不同。

如果你使用的是其他网络抓包工具,例如Wireshark,那么相关选项和语法可能会略有不同。

基于Linux C实现的网卡抓包程序

基于Linux C实现的网卡抓包程序

/* 绑定物理网卡 */ stLocal.sll_family = PF_PACKET; stLocal.sll_ifindex = stIf.ifr_ifindex; stLocal.sll_protocol = htons(ETH_P_ALL); iRet = bind(fd, (struct sockaddr *)&stLocal, sizeof(stLocal)); if (0 > iRet) {
/* 输出MAC地址 */ static void ethdump_showMac(const int iType, const char acHWAddr[]) {
int i = 0;
if (0 == iType) {
printf("SMAC=["); } e ls e {
printf("DMAC=["); }
return 0; }
/* 获取L2帧封装的协议类型 */ static char *ethdump_getProName(const int iProNum) {
int iIndex = 0;
for(iIndex = 0; iIndex < sizeof(g_iEthProId) / sizeof(g_iEthProId[0]); iInd e x++)
0.基础知识 在Linux环境下,可以使用raw socket,即原始套接字,接收本机网卡上的数据帧或者数据包,实
现对与监听网络的流量和分析是很有作用的。一共可以有3种方式创建这种s o cke t: 1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)发送 接收ip数据包 2.socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))发送 接收以太网数据帧

charles抓包工具使用方法

charles抓包工具使用方法

charles抓包⼯具使⽤⽅法1.下载charles();下载后安装,安装完成后打开,出现如下界⾯;2、开始对 PC 端的charles进⾏配置,点击proxy(代理),找到代理设置对代理端⼝进⾏进⾏配置,端⼝号默认8888,你可以⾃⼰修改,选中 enable transparent http prxying,代表启⽤http代理;点击OK,完后配置。

如果你只想对pc端的数据交互进⾏抓取,那么到这⼀步就⾏了3、对移动端,⼿机app上⾯的数据进⾏抓取。

注意事项:⼿机与pc是否处于同⼀⽹络。

3.1、开始配置移打开⼿机的WIFI功能区,进⼊链接WIFI设置界⾯,点击⾼级设置,进⼊以下界⾯,or 点击代理设置,进⼊代理设置界⾯。

代理服务器主机名称填写你PC的IP地址,如果你不知道你PC的ip地址,可以在charles上查看到本地IP地址,点击local IP Address 后直接就能看到你的PC⽹络的IP地址。

端⼝填写你在charles上设置的端⼝,如果你没有修改端⼝,依然是8888,那么直接填⼊8888;点击完成or保存,charles会给你⼀个提⽰框,是否允许链接⼿机⽹络请求;如下:点击允许,ALLOW.如果把你点击了否认 Deny,那么你关闭charles,再重新⾛⼀遍吧(哈哈哈哈O(∩_∩)O哈哈哈~);Warning:如果没有弹出提⽰框,那么请检查charles是否处于防⽕墙信任软件序列⾥,这个你可以在防⽕墙设置连看到.将应⽤添加进⼊允许序列⾥,在不关闭防⽕墙的情况下,可以抓到数据,如果依然没有,那么久关闭防⽕墙,再试⼀次;现在,charles就可以抓取⼿机上的数据了,包括⽹页、APP、及其他⽹络请求;甚⾄某些App⽹络安全做得不好,你都可以将你的账户和密码在charles上访问到。

Warning:这只能对http协议的数据进⾏抓取.4、对https的解析,之前我们抓取http协议数据的时候,会发现⼀个问题,就是只要是https协议,那么全部是上锁了,并不能查看到数据。

charles抓包工具使用方法

charles抓包工具使用方法

charles抓包工具使用方法Charles抓包工具使用方法一、什么是Charles抓包工具Charles是一款功能强大的网络抓包工具,可以截取并分析HTTP 和HTTPS的网络流量,帮助开发者调试和监测网络请求。

它可以在计算机和移动设备上使用,支持多平台操作系统。

二、安装和配置1. 下载Charles:从官方网站下载并安装适合您操作系统的版本。

2. 安装证书:在Charles中,点击Help -> SSL Proxying -> Install Charles Root Certificate,按照指示安装证书。

3. 配置网络代理:在手机或电脑的网络设置中,将代理设置为Charles所在计算机的IP地址和端口号。

三、抓包流程1. 打开Charles:在电脑上双击打开Charles应用程序。

2. 打开目标应用:确保您的手机或电脑与Charles所在计算机处于同一网络环境中,打开您需要抓包的应用。

3. 开启抓包:在Charles中,点击“Start”按钮开始抓包。

4. 分析流量:在Charles的“Session”选项卡中,您可以看到抓取到的网络请求和响应。

您可以根据需要进行过滤、排序和搜索,以方便分析。

5. 拦截请求:如果需要修改请求或响应,可以在Charles中进行拦截并修改相关内容。

在“Tools”选项卡中,选择“Map Local”或“Map Remote”,添加映射规则并设置相应的动作。

6. 导出报告:在Charles中,您可以将抓包数据导出为HAR文件或其他格式,以便与团队成员或其他开发者共享。

四、常用功能介绍1. 设置断点:在Charles的“Breakpoints”选项卡中,您可以设置断点以暂停请求的发送,方便进行调试和修改。

2. 重发请求:在Charles的“Sequence”选项卡中,您可以找到之前的请求记录,并选择性地重发请求。

3. 仿真慢速网络:在Charles的“Throttle”选项卡中,您可以模拟低速网络环境,以测试应用在不同网络条件下的性能。

charles抓包工具的用法

charles抓包工具的用法

charles抓包工具的用法
Charles是一款HTTP代理/监视/反向代理的Mac OS X上的应用程序,可以帮助你更好地理解HTTP连接,学习和调试Web应用程序、AJAX应用程序。

使用Charles可以轻松地看到所有正在发生的HTTP连接,即客户端发送给服务器的请求和服务器返回给客户端的响应,以
及中间被终端服务器捕获的数据包。

使用Charles抓包工具主要有以下 6 个步骤:
1、启动Charles:
首先,打开Charles,点击“Proxy”,然后点击“Charles Proxy”,这时Charles就会开始运行了。

2、设置浏览器代理:
接下来,打开你的浏览器的代理设置,将代理设置为127.0.0.1;端
口号设置为 8888 即可。

3、开启 Charles 代理:
打开 Charles,点击菜单栏的“Proxy”,点击“MacOSX Proxy”,
即可开启 Charles 的代理。

4、抓取你要测试的网页地址:
然后,在浏览器里输入你要抓取的网页地址,然后等待抓取完成。

5、查看 Charles 中抓取的网页地址:
随后,打开 Charles,在 Charles 的主界面中可以清晰的看到所有
刚刚抓取到的网页地址。

6、关闭 Charles 代理:
最后,在 Charles 主界面点击菜单“Proxy”,然后点击“Stop Charles Proxy”,即可关闭 Charles 代理。

vc抓包程序

vc抓包程序

vc抓包程序vc 抓包程序#include#include#include//#include/* The IP header */#pragma comment(lib,"WS2_32")#pragma comment(lib,"Mpr")typedef struct _IPHEADER {unsigned char header_len:4;unsigned char version:4;unsigned char tos; // type of serviceunsigned short total_len; // length of the packet unsigned short ident; // unique identifierunsigned short flags;unsigned char ttl;unsigned char proto; // protocol ( IP , TCP, UDP etc) unsigned short checksum;unsigned int sourceIP;unsigned int destIP;}IPHEADER;struct TCPPacketHead {WORD SourPort;WORD DestPort;DWORD SeqNo;DWORD AckNo;BYTE HLen;BYTE Flag;WORD WndSize;WORD ChkSum;WORD UrgPtr;};struct ICMPPacketHead {BYTE Type;BYTE Code;WORD ChkSum;};struct UDPPacketHead {WORD SourPort;WORD DestPort;WORD Len;WORD ChkSum;};int main(){WORD wVersionRequested;WSADATA wsaData;int err;CHAR szHostName[128] = {0};HOSTENT* pHost = NULL;CHAR* pszIp = NULL;int iNum = 0;SOCKADDR_IN sa;wVersionRequested = MAKEWORD( 2, 0 );err = WSAStartup( wVersionRequested, &wsaData ); SOCKET ssocket ;ssocket = socket( AF_INET , SOCK_RAW , IPPROTO_IP ) ; int rcvtimeo = 5000 ; // 5 sec insteadof 45 as defaultsetsockopt( ssocket , SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) );sa.sin_family = AF_INET;sa.sin_port = htons(7000);pHost = gethostbyname(szHostName);pszIp=inet_ntoa(*(in_addr*)pHost->h_addr_list[1]);sa.sin_addr.s_addr= inet_addr(pszIp);bind(ssocket,(PSOCKADDR)&sa, sizeof(sa));DWORD dwBufferLen[10] ;DWORD dwBufferInLen= 1 ;DWORD dwBytesReturned = 0 ;WSAIoctl( ssocket, _WSAIOW(IOC_VENDOR,1), &dwBufferInLen,sizeof(dwBufferInLen), &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned , NULL , NULL );char buf [1000] , *bufwork ;char *pSource , *pDest ;char szSource [16] , szDest[16] , szErr [ 50 ];for (;true;){memset( buf , 0 , sizeof(buf) ) ;int len = recv( ssocket , buf , sizeof( buf ) , 0 ) ;bufwork = buf;IPHEADER * pIpHeader = (IPHEADER *)bufwork ;in_addr ina ;ina.S_un.S_addr = pIpHeader->sourceIP ;pSource = inet_ntoa( ina ) ;strcpy( szSource , pSource ) ;ina.S_un.S_addr = pIpHeader->destIP ;pDest = inet_ntoa( ina ) ;strcpy( szDest , pDest ) ;printf("datalen %d len %d IP %sip %s",len,pIpHeader->header_len,szSource,szDest);int HdrLen, totallen;WORD sourport, destport;//struct IPPacketHead *pIPHead;struct TCPPacketHead *pTCPHead;//struct ARPPacket *pARPHead;struct ICMPPacketHead *pICMPHead;struct UDPPacketHead *pUDPHead;HdrLen = pIpHeader->header_len&0xf;HdrLen *= 4;switch(pIpHeader->proto){case IPPROTO_ICMP:{pICMPHead=(struct ICMPPacketHead *)(buf+HdrLen); //解析ICMP协议break;}case IPPROTO_TCP:{pTCPHead=(struct TCPPacketHead *)(buf+HdrLen); sourport = ntohs(pTCPHead->SourPort);destport = ntohs(pTCPHead->DestPort);printf("tcp sourport %d destport %d",sourport,destport); //解析tcp协议break;}case IPPROTO_UDP:{pUDPHead=(struct UDPPacketHead *)(buf+HdrLen); //解析UDP协议 break;}}printf("\n"); }return 0;}。

如何对pc客户端进行抓包

如何对pc客户端进行抓包

如何对pc客户端进⾏抓包要想实现写爬⾍,抓取到数据,⾸先我们应该分析客户端和服务器的请求/响应,前提就是我们能监控到客户端是如何与服务器交互的。

⼀般我们⽤fiddler或Charles抓包,都是对web和⼿机app的抓包,很少对pc客户端抓包,当我们⾸次试图抓取pc客户端的数据时,发现以往的⽅法并不适⽤了。

web和app抓包这⾥不做解释,可⾃⾏百度,这⾥主要说⼀下个⼈是如何抓取pc客户端数据的。

1:准备⼯具 fiddler / Proxifier这⾥有Proxifier安装包2:fiddler正常设置——>打开Fiddler,在菜单栏,打开Tools --Options,前三个选项卡设置下。

3:PC客户端(C/S)抓包需借助⼯具 Proxifier,设置也简单3.1:先打开代理服务器进⾏配置3.2:在打开代理规则进⾏配置4:配置好后,此时电脑上C/S客户端可以抓到包ps:注意,并不是所有pc客户端都能抓到包。

个别客户端做了安全防护机制。

个⼈遇到的⼀些场景有:在确认所有条件都配置好的情况下:a).⽹络可正常访问,但抓取不到数据b).使⽤fiddler抓取数据时,就提⽰⽆⽹络c).抓取到了数据,但都是乱码,⽆法解码(个⼈使⽤了⼏种解码⽅式,并未解码成功,⼤家遇到此情况可以尝试下)总结:以上就是使⽤fiddler⼯具结合 Proxifier⼯具抓取pc客户端的操作。

以下为⼀种新的场景,⼀般使⽤不多,可了解下。

上⾯讲的是在本机电脑抓pc客户端数据,那如果在远程机上,按此⽅法设置是不⾏的。

相当于在远程机⼜套了⼀层关系,具体操作如下:a):还是先打开代理服务器进⾏配置b):在打开代理规则进⾏配置。

名称⾃定义。

1、应⽤程序选fiddler.exe,动作选远程机代理;2,应⽤程序选客户端.exe,动作选本地代理。

相当于fiddler⾛远程机的代理,远程机上的客户端⾛本地代理,这样就能抓取到该客户端的数据了。

charles下载安装教程详细(抓包)

charles下载安装教程详细(抓包)

charles下载安装教程详细(抓包)⼀、下载&安装1、官⽹下载https:///latest-release/download.do2、在线破解⼯具的使⽤,在线⽣成jar包https:///mytools/charles/RegisterName 任意随便起个注册的名字选择你下载charlets的版本⽣成jar包,然后下载下来3、替换jar包删除原lib⽬录下的charles.jar,将新下载的charles.jar放到Charles安装⽬录的lib⽬录下4、启动程序即可⼆、使⽤教程1、charles的说明Charles其实是⼀款代理服务器,通过过将⾃⼰设置成系统(电脑或者浏览器)的⽹络访问代理服务器,然后截取请求和请求结果达到分析抓包的⽬的。

该软件是⽤Java写的,能够在Windows,Mac,Linux上使⽤。

安装Charles的时候要先装好Java环境。

Charles的主要功能:(1)截取Http 和 Https ⽹络封包。

(2)⽀持重发⽹络请求,⽅便后端调试。

(3)⽀持修改⽹络请求参数。

(4)⽀持⽹络请求的截获并动态修改。

(5)⽀持模拟慢速⽹络。

2、PC抓包(1)安装ssl证书帮助—SSL代理—安装charles证书(2)使⽤配置代理,勾选上配置抓包,填⼊默认代理端⼝ 8888,且勾选 “Enable transparent HTTP proxying” 就完成了设置。

设置过滤请求3、⼿机端抓包(1)使⼿机和电脑在⼀个局域⽹内此时你的⼿机必须和电脑在同⼀个⽹络/wifi⾥,⼿机选择和电脑相同wifi—>长按此wifi弹框中选择修改⽹络—>显⽰⾼级选项—>服务器主机名输⼊框中输⼊电脑ip地址,服务器端⼝号填写8888——>保存即可,此时⼿机和电脑绑定在⼀起⼀遍电脑抓⼿机上请求⽹络数据.打开浏览器输⼊该⽹址:第⼀次设置成功代理后,随便打开⼀个需要⽹络的应⽤,PC端会⾃动弹出以下提⽰,选择allow允许Charles代理(2)⼿机端抓包https由于https协议的特殊性,所以要求电脑端和⼿机端都需要安装下证书,否则会看到返回的数据都是乱码。

网络抓包程序运行说明

网络抓包程序运行说明

网络抓包程序运行说明网络抓包一、前言Windows简单个人网络数据包过滤是我自己前不久的小作品,本文介绍如何安装自己改进的微软的NDIS框架并编译成自己的passthru.sys的过程,安装的过程本不应该像下文那样繁琐复杂,我完全可以自己编写一个MFC工程,将以下的安装过程完全交给程序来实现,你完全可以只需要点击一下exe文件就可以完成安装。

但是本人由于找工作心切,内心比较焦虑,再由于编写这个安装exe本身是一件简单的事情,所以也就懒得编写。

二、安装前的准备打开文件后,有如图一有两个工程,其中,myFireWall工程是用MFC编写的,用来控制Windows个人简单防火墙的界面信息;而passthru工程是用采用微软NDIS框架,添加和改进了框架内的某些函数,并在内实现了我想要的一些功能,在passthru 工程中我所改过的地方均有中文做了注释。

图一打开passthru工程文件夹,在passthru\driver路径下会看到如图二所示,并将该目录下的netsf和netsf_m这两个文件和passthru\driver\objchk_win7_x86\i386目录下的passthru.sys拷贝到同一个文件夹下(例如我将这三个文件拷贝到C:\zhou文件下,如图三所示)。

图二网络抓包图三三、安装的过程本地连接上右键,如图四所示:网络抓包图四点击属性后如图五所示,并点击“安装”,弹出图六的界面,并双击“服务”:网络抓包图五图六网络抓包双击“服务”后,弹出如图七所示的界面:图七点击“从磁盘安装”,弹出如图八所示的界面:图八点击“浏览”,进入到我们在准备工作的C\zhou文件夹目录下,选择netsf文件,如图九所示:网络抓包图九然后点击“确定”,然后下一个过程也直接点击“确定”,系统就会为我们自动安装。

在安装的过程中,可能会弹出如图十的界面,别管他,直接点击“仍然继续”,完成安装。

图十安装完成后,在“本地连接属性”中会有“Passthru Driver”,说明就安装成功了,如图十一所示:网络抓包图十一安装完成后,打开myFireWall\Debug目录下的myFireWall.exe程序就可以运行了,请务必注意,如果没有安装Passthru Driver,或者安装Passthru Driver的过程没有成功,myFireWall.exe就打不开。

libCap实现抓包程序

libCap实现抓包程序

libpcap , 以及基于libpcap实现一个简单的抓包程序安装libpcap是一个c库,用于网络抓包和过滤,源于tcpdump项目,是从最开始tcpdump中剥离出来的一个库,tcpdump中抓包,过滤,capture file的读写的代码被提取出来成了libpcap。

现在也是由tcpdump项目的开发者维护。

从tcpdump的官网上下载下来后,包里面有一个INSTALL.txt文件,也就是三步的内容,./configure; make; make install;在这个过程中我安装了flex(一个lexical analyzer generator)和yacc才成功了写的一个简单程序pcap实际上是从链路层抓包的,所以可以从中提出取出从链路层开始的包信息,官网里(这里)有详细的基于pcap的编程文档。

这个文档中有提到基于libpcap编程的基本步骤,如何应用过滤条件,如何拿到一个包后回调,以及在回调函数中(下面的call_back)怎样提取包的详细信息,因为是得到这个链路层包的实际内容的(以字串的形式),所以是可以提取出从链路层开始,网络程ip, 传输层如tcp的所有信息的,基本上不同的基于libpcap的软件也就是这里不同了,怎样提取和展示包的信息。

基于这个文档我写了一个简单的程序1 #include<stdio.h>2 #include<pcap.h>3 #include<string>45using namespace std;67static const unsigned int ETHER_ADDR_LEN = 6;8void call_back(u_char * args, const struct pcap_pkthdr * header, const u_char * packet);9string generate_mac_address(char macChars[ETHER_ADDR_LEN]);1011int main(){12 pcap_t * handle; //Sesion handle13char dev[] = "eth2"; //device to sniff on14char errbuf[PCAP_ERRBUF_SIZE]; //error string15char filter_exp[] = ""; //filter expression16 bpf_u_int32 mask; //The netmask of our sniffing device17 bpf_u_int32 net; //The IP of our sniffing device1819struct bpf_program fp; //the compiled filter expression2021//查询device的mask和ip22if (pcap_lookupnet(dev, &net, &mask, errbuf) == -1){23 fprintf(stderr, "Can't get netmask for device %s\n", dev);24 net = 0;25 mask = 0;26 }2728//obtaining packet capture descriptor29 handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf); 30if(handle == NULL){31 fprintf(stderr, "Can't open device %s\n", dev); 32return2;33 }3435//before apply filter exp, compile it36if(pcap_compile(handle, &fp, filter_exp, 0, net) == -1){37 fprintf(stderr, "can't parse filter %s: %s\n",filter_exp, pcap_geterr(handle));38return2;39 }40//apply filter to this session41if(pcap_setfilter(handle, &fp) == -1){42 fprintf(stderr, "can't install filter %s: %s\n", filter_exp, pcap_geterr(handle));43return2;44 }4546//now the device is prepared to sniff under the filter condition47struct pcap_pkthdr header; //packet header struct48const u_char * packet; //actual packet4950//5表示积累5个包pcap_loop才返回,但每个包都会调一次call_back51while(!pcap_loop(handle, 5, call_back, NULL)){52 printf("-------\n"); //每8行才会输出一次这个53 }54 pcap_close(handle);55 }5657struct sniff_ethernet {58char ether_dhost[ETHER_ADDR_LEN]; /*Destination host address */59char ether_shost[ETHER_ADDR_LEN]; /*Source hostaddress */60 u_short ether_type; /*IP? ARP? RARP? etc */61 };6263//call_back function的统一原型64void call_back(u_char * args, const struct pcap_pkthdr * header, const u_char * packet){65static int count = 0;66struct sniff_ethernet * ethernet; //ethernet header67 ethernet = (struct sniff_ethernet*)(packet);6869//把6字节的字符串转换成mac地址的表示形式70std::string source_mac_address = generate_mac_address(ethernet->ether_shost);71std::string dst_mac_address = generate_mac_address(ethernet->ether_dhost);7273 printf("wy: call_back called %d, %s->%s, packet length:%d\n", count++, source_mac_address.c_str(), dst_mac_address.c_str(), header->len);74 }7576//由字节为单位字符串生成mac地址,16进制数的字串77string generate_mac_address(char macChars[ETHER_ADDR_LEN]){78string macAddr;79char temp[2];80for(int i = 0; i < ETHER_ADDR_LEN; i++){81//把一个字节转化成16进制表示形式82 sprintf(temp, "%x", macChars[i]);83if(i != 0){84 macAddr.append(":");85 }86 macAddr.append(temp, 2);87 }88return macAddr;89 }这个程序上面有比较详细的注释,就是把通用的基于libpcap编程的流程走了一遍,最后打印出每个包链路层from和to的MAC地址,以及每个包的长度.对于call_back的第二个参数struct pcap_pkthdr, 这是pcap.h中定义的一个结构体,包含了这个包的一些信息,捕获时间,包长度, 可以看到程序中的包长度就是从中提取的,定义如下1 struct pcap_pkthdr {2 struct timeval ts; /* time stamp */3 bpf_u_int32 caplen; /* length of portion present */4 bpf_u_int32 len; /* length this packet (off wire) */5 };上面的参数char * packet实际上是整个包在内存在的地址,为了从这当中提取出信息,必须要自己定义相应的数据结构从这个纯字符串中去提,可以看到我照着文档中去定义了一个struct sniff_ethernet,这个是需要自己定义的,pcap.h中是没有的,然后可以看到我如何写了一个函数generate_mac_address把这个6字节的字符串转换成mac地址标准的表达形式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BYTE Type;
BYTE Code;
WORD ChkSum;
};
//UDP首部格式
struct UDPPacketHead {
WORD SourPort;
WORD DestPort;
WORD Len;
WORD ChkSum;
};
//抓包程序部分
int main()
{
//解析UDP协议
break;
}
}
printf("\n");
printf("\n");
}
return 0;
}
#include <WINSOCK2.H>
#include<iostream>
#include<stdio.h>
#include <winsock2.h>
#pragma comment(lib,"WS2_32")
#pragma comment(lib,"Mpr")
using namespace std;
//IP数据报首部格式
typedef struct _IPHEADER {
unsigned char header_len:4;
unsigned char version:4;
unsigned char tos; // type of service
unsigned short total_len; // length of the packet
struct UDPPacketHead *pUDPHead;
HdrLen = pIpHeader->header_len&0xf;
HdrLen *= 4;
switch(pIpHeader->proto)
{
case IPPROTO_ICMP:
{
pICMPHead=(struct ICMPPacketHead *)(buf+HdrLen);
WORD SourPort;
WORD DestPort;
DWORD SeqNo;
DWORD AckNo;
BYTE HLen;
BYTE Flag;
WORD WndSize;
WORD ChkSum;
WORD UrgPtr;
};
//ICMP首部格式
struct ICMPPacketHead {
printf("tcp sourport %d destport %d",sourport,destport);
//解析tcp协议
break;
}
case IPPROTO_UDP:
{
pUDPHead=(struct UDPPacketHead *)(buf+HdrLen);
wVersionRequested = MAKEWORD( 2, 0 );
err = WSAStartup( wVersionRequested, &wsaData );//初始化winsock2
SOCKET ssocket;
ssocket = socket( AF_INET , SOCK_RAW , IPPROTO_IP ) ;
in_addr ina ;
ina.S_un.S_addr = pIpHeader->sourceIP ;
pSource = inet_ntoa( ina ) ;
strcpy( szSource , pSource ) ;
ina.S_un.S_addr = pIpHeader->destIP ;
pDest = inet_ntoa( ina ) ;
strcpy( szDest , pDest ) ;
int length=pIpHeader->header_len;
//itext1=pIpHeader->text;
//strcpy(itext,itext1);
//printf("datalen %d len %d IP %s ip %s",len,pIpHeader->header_len,szSource,szDest);
sa.sin_family = AF_INET;
sa.sin_port = htons(7000);
pHost = gethostbyname(szHostName);//获取本地IP地址
pszIp=inet_ntoa(*(in_addr*)pHost->h_addr__addr= inet_addr(pszIp);
//与本地主机进行绑定
bind(ssocket,(PSOCKADDR)&sa, sizeof(sa));
DWORD dwBufferLen[10] ;
DWORD dwBufferInLen= 1 ;
DWORD dwBytesReturned = 0 ;
//控制一个套接口的模式
WSAIoctl( ssocket, _WSAIOW(IOC_VENDOR,1), &dwBufferInLen, sizeof(dwBufferInLen), &dwBufferLen, sizeof(dwBufferLen),&dwBytesReturned , NULL , NULL );
unsigned short checksum;
unsigned int sourceIP;
unsigned int destIP;
//unsigned char text[500];
//string data;
}IPHEADER;
//TCP首部格式
struct TCPPacketHead {
int rcvtimeo = 5000 ; // 5 sec instead of 45 as default
//设置套接口
setsockopt( ssocket , SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) );
//strcpy(text,s.c_str());
//cout<<buf<<endl;
int HdrLen, totallen;
WORD sourport, destport;
struct TCPPacketHead *pTCPHead;
struct ICMPPacketHead *pICMPHead;
cout<<"datalen:"<<len<<"; len:"<<length<<"; 源地址:"<<szSource<<"; 目的地址"<<szDest;
//printf("\n");
cout<<endl;
//string s=pIpHeader->data;
//char s1[100];
char buf [1000] , *bufwork ;
char *pSource , *pDest ;
char szSource [16] , szDest[16] , szErr [ 50 ];
//char text[500];
//char *itext1;
//设置监听数据包的数目
WORD wVersionRequested;
WSADATA wsaData;
int err;
CHAR szHostName[128] = {0};
HOSTENT* pHost = NULL;
CHAR* pszIp = NULL;
int iNum = 0;
SOCKADDR_IN sa;
for (int i=0;i<20;i++)
{
memset( buf , 0 , sizeof(buf) ) ;
int len = recv( ssocket , buf , sizeof( buf ) , 0 ) ;
bufwork = buf;
IPHEADER * pIpHeader = (IPHEADER *)bufwork ;
unsigned short ident; // unique identifier
unsigned short flags;
unsigned char ttl;
unsigned char proto; // protocol ( IP , TCP, UDP etc)
//解析ICMP协议
break;
}
case IPPROTO_TCP:
{
pTCPHead=(struct TCPPacketHead *)(buf+HdrLen);
sourport = ntohs(pTCPHead->SourPort);
destport = ntohs(pTCPHead->DestPort);
相关文档
最新文档