Win32网络操作

寻找win32 internet api 今天打算找个简单的文件下载模块,以为轻松完成,谁知道找了大半天竟然一点收获也没有,不劳而获果然不太行,只怪自己基础差,不然早就自己写了,无奈下只能继续努力,终于找到一个相关的,文章如下: 网络函数最好的探讨Win32网络函数的方法是直接进入代码。下面的代码是样本的代码,为了方便阅读,错误处理部分已经被删除掉了。HINTERNET hNet = ::InternetOpen("MSDN Su 阅读详情
摘要 这篇技术性文章讨论了如何利用Microsoft Win32网络函数创建一个网络浏览器。这篇文章的宗旨是让读者了解一些Win32网络函数的作用、能力和使用范围,而不是为这些功能给出一个详细的文档。这篇文章所配合的SurfBear样本应用程序使用Win32网络函数从网络服务器上读取HTML文件,并把它们显示成原始的、没有经过格式化的文本。 介绍 不通过网络,你就无法了解我的一个朋友。计算机杂志已经在internet上设置了电子期刊,而本地的报纸也已经把整个段落都放到了网络上。事实上,许多报纸都在联机。每个人都有一个主页,甚至一些无家可归的人都有一个主页。虽然有许多关于网络的消息难免言过其实,但网络正在变成计算机整体的一部分已经是无庸置疑的了。 Microsoft 已经介绍了Microsoft Win32网络函数来协助开发者把网络变成他们的应用程序的整体部分。这些新的功能简化了使用FTP(文件传输协议)、和HTTP(超文本传输协议)访问网络。使用Win32网络函数的开发者不需要对TCP/IP或Windows 配件。对于一些最普通的操作,开发者不需要知道他们正在使用的某个协议的细节。 最终,Win32网络函数将成为Win32应用程序接口的一部分并且与基于Windows的不同的平台一起发布。最初,Win32网络函数将安装在一个叫做WININET.DLL的再分布式动态链接库里。 网络函数 最好的探讨Win32网络函数的方法是直接进入代码。下面的代码是样本的代码,为了方便阅读,错误处理部分已经被删除掉了。 HINTERNET hNet = ::InternetOpen("MSDN SurfBear",
                                PRE_CONFIG_INTERNET_ACCESS,
                                NULL,
                                INTERNET_INVALID_PORT_NUMBER,
                                0) ; HINTERNET hUrlFile = ::InternetOpenUrl(hNet,
                                " http://www.microsoft.com ",
                                NULL,
                                0,
                                INTERNET_FLAG_RELOAD,
                                0) ; char buffer[10*1024] ;
DWORD dwBytesRead = 0;
BOOL bRead = ::InternetReadFile(hUrlFile,
                                buffer,
                                sizeof(buffer),
                                &dwBytesRead); ::InternetCloseHandle(hUrlFile) ; ::InternetCloseHandle(hNet) ;
上面列举的代码包括四个网络函数:InternetOpen、InternetOpenOrl、InternetReadFile和InternetCloseHandle。下面我们依次对这些函数进行分析。 InternetOpen InternetOpen初始化WININET.DLL。它在其他的Win32网络函数之前被调用。 HINTERNET hNet = ::InternetOpen(
          "MSDN SurfBear",              // 1 LPCTSTR lpszCallerName
          PRE_CONFIG_INTERNET_ACCESS,   // 2 DWORD dwAccessType
          "",                           // 3 LPCTSTR lpszProxyName
          INTERNET_INVALID_PORT_NUMBER, // 4 INTERNET_PORT nProxyPort
          0                             // 5 DWORD dwFlags
) ;
InternetOpen返回一个类型为HINTERNET的句柄。其他的Win32网络函数把这个句柄当作一个参数。现在你不能把一个HINTERNET句柄用在类似于ReadFile之类的其他Win32函数中。但是随着Microsoft Windows和Microsoft Windows NT网络支持的成熟,这一点在将来不是不可能实现的。 当你已经结束使用Wein32网络函数时,你应该调用InternetCloseHandle释放InternetOpen分配的资源。使用Microsoft基础类(MFC)的应用程序将从文件的构造程序里象征性地调用InternetOpen。绝大多数应用程序都将在每一进程里调用InternetOpen。 InternetOpen 的第一个参数lpszCallerName指定正在使用网络函数的应用程序。当HTTP协议使用时,这个名字将变成用户代理。 第二个参数dwAccessType指定访问类型。在上面的例子里,PRE_CONFIG_INTERNET_ACCESS访问类型指示Win32网络函数使用登记信息去发现一个服务器。使用PRE_CONFIG_INTERNET_ACCESS需要正确设定登记信息。这里我耍了一个小花招并让网络开发者替我登记注册。 在登记注册中,把AccessType设置为1,则意味着“直接入网”,把AccessType 设置为2,意味着“使用网关”。把DisableServiceLocation设置为1,将让它使用一个已经命名的服务器;否则将找到一个使用注册信息和名字决议(RNR)应用程序接口的服务器,它是Windows接口的一部分。 其他的访问类型包括以下几种: LOCAL_INTERNET_ACCESS只连接到当地Internet网站。例如,如果我使用SurfBear标志,我就只能访问Microsoft整体的Internet网站。 
CERN_PROXY_INTERNET_ACCESS使用一个CERN代理去访问web。CERN代理是一个充当网关的web服务器并且能向要使用代理的服务器发送HTTP请求。 
GATEWAY_INTERNET_ACCESS允许连接到World Wide Web。我可以用这个访问类型去访问web上的任何站点。 
GATEWAY_PROXY_INTERNET_ACCESS和CERN_PROXY_ACCESS访问类型要求第三个参数给InternetOpen:服务器名(lpszProxyName)。PRE_CONFIG_INTERNET_ACCESS不要求服务器名,因为他可以为服务器搜索寄存信息。 NProxyPort参数用在CERN_PROXY_INTERNET_ACCESS中用来指定使用的端口数。使用INTERNET_INVALID_PORT_NUMBER相当于提供却省的端口数。 最后一个参数棗dwFlags,设置额外的选择。你可以使用 INTERNET_FLAG_ASYNC标志去指示使用返回句句柄的将来的Internet函数将为回调函数发送状态信息,使用InternetSetStatusCallback进行此项设置。   InternetOpenUrl 一旦你把Win32网络函数初始化了,你就可以使用其他网络函数。下一个要调用的Internet 函数是InternetOpenUrl。这个函数连接到一个网络服务器上并且最被从服务器上读取数据。InternetOpenUrl能对FTP,Gopher或HTTP协议起作用。在这篇文章中,我们只涉及HTTP协议。 HINTERNET hUrlFile = ::InternetOpenUrl(
          hNet,                       // 1 HINTERNET hInternetSession
          " http://www.microsoft.com ", // 2 LPCTSTR lpszUrl
          NULL,                       // 3 LPCTSTR lpszHeaders
          0,                          // 4 DWORD dwHeadersLength
          INTERNET_FLAG_RELOAD,       // 5 DWORD dwFlags
          0                           // 6 DWORD dwContext
) ;
InternetOpenUrl也返回一个HINTERNET,它被传递给在这个URL(统一资源定位)上操作的函数。你应该使用InternetClose来关闭这个句柄的处理。 InternetOpenUrl的第一个参数hInternetSession是从InternetOpen返回的句柄。第二个参数lpszUrl是我们需要的资源的URL(统一资源定位)。在上面的例子中,我们想得到一个Microsoft的web主页。下面两个参数lpszHeaders和HeaderLength用来向服务器传送额外的信息。使用这些参数要求具有正在使用的特定协议的知识。 DwFlag是一个可以用几种方式修改InternetOpenUrl行为的标志,InternetOpenUrl的行为包括关闭、隐藏,使原始数据可用和用存在的连接取代开辟一个新的连接。 最后一个参数dwContext是一个 DWORD上下文值。如果有一个值已经被指定,它将被送到状态回调函数。如果这个值是0,信息将不会被送到状态回调函数。 InternetReadFile 你打开一个文件后,就要读它,所以下一个函数是InternetReadFile是符合逻辑的: char buffer[10*1024] ;
DWORD dwBytesRead = 0;
BOOL bRead = ::InternetReadFile(
     hUrlFile,                 // 1 HINTERNET hFile
     buffer,                   // 2 LPVOID lpBuffer
     sizeof(buffer),           // 3 DWORD dwNumberOfBytesToRead
     &dwBytesRead              // 4 LPDWORD lpdwNumberOfBytesRead
); buffer[dwBytesRead] = 0 ;
pEditCtrl->SetWindowText(buffer) ;
InternetReadFile接收InternetOpenUrl返回的句柄。它也对其他Win32网络函数,例如FtpOpenFile,FopherOpenFile和HttpOpenRequest返回的句柄有影响。 剩下的InternetReadFile的三个参数也非常的明白直接。Inbuffer是指向保留数据的缓冲区的一个无返回值指针,dwNumberOfByteToRead以字节为单位指定缓冲区的尺寸。最后一个参数,lpdwNumberOfBytesRead是一个指向包含读入缓冲区字节数的变量的指针。如果返回值是TRUE,而且lpdwNumberOfBytesRead指向0,则文件已经读到了文件的末尾。这个行为与Win32 Re3adFile的函数的行为是一致的。一个真正的web浏览器将在InternetReadFile上循环 ,不停地从Internet上读入数据块。 为了显示缓冲区,向缓冲区添加一个0并把它送到编辑器控制。 这样,InternetOpen、InternetOpenUrl和InternetReadFile一起创建了Internet浏览器的基础。他们使从Internet上读取文件就象从你的本地硬盘驱动器上读取文件一样容易。   HTTP函数 在一些例子中,InternetOpenUrl太普通了,所以你可能需要其他的Win32网络函数。InternetOpenUrl相当与不同的FTP,GOPHER和HTTP函数的封皮。当使用HTTP时,InternetOpenUrl调用InternetConnect,HttpOpenRequest以及HttpSendRequest,比如说我们想要在下载一个HTML页之前得到它的尺寸以便于我们在缓冲区中为其分配适当的尺寸,HttpQueryInfo将得到web页的大小。 警告:不是所有web 页都支持得到页尺寸。(例如: www.toystory.com www.movielink.com 不支持这个功能)另外,TCP/IP能传递的数据也比要求的要少。所以,你的应用程序应该处理着两种情况并且围绕InternetReadFile循环直到结果为TRUE同时*lpdwNumberOfBytesRead为0。 // Open Internet session.
HINTERNET hSession = ::InternetOpen("MSDN SurfBear",
                                    PRE_CONFIG_INTERNET_ACCESS,
                                    NULL, 
                                    INTERNET_INVALID_PORT_NUMBER,
                                    0) ; // Connect to  www.microsoft.com .
HINTERNET hConnect = ::InternetConnect(hSession,
                                    " www.microsoft.com ",
                                    INTERNET_INVALID_PORT_NUMBER,
                                    "",
                                    "",
                                    INTERNET_SERVICE_HTTP,
                                    0,
                                    0) ; // Request the file /MSDN/MSDNINFO/ from the server.
HINTERNET hHttpFile = ::HttpOpenRequest(hConnect,
                                     "GET",
                                     "/MSDN/MSDNINFO/",
                                     HTTP_VERSION,
                                     NULL,
                                     0,
                                     INTERNET_FLAG_DONT_CACHE,
                                     0) ; // Send the request.
BOOL bSendRequest = ::HttpSendRequest(hHttpFile, NULL, 0, 0, 0); // Get the length of the file.            
char bufQuery[32] ;
DWORD dwLengthBufQuery = sizeof(bufQuery);
BOOL bQuery = ::HttpQueryInfo(hHttpFile,
                              HTTP_QUERY_CONTENT_LENGTH, 
                              bufQuery, 
                              &dwLengthBufQuery) ; // Convert length from ASCII string to a DWORD.
DWORD dwFileSize = (DWORD)atol(bufQuery) ; // Allocate a buffer for the file.   
char* buffer = new char[dwFileSize+1] ; // Read the file into the buffer. 
DWORD dwBytesRead ;
BOOL bRead = ::InternetReadFile(hHttpFile,
                                buffer,
                                dwFileSize+1, 
                                &dwBytesRead);
// Put a zero on the end of the buffer.
buffer[dwBytesRead] = 0 ; // Close all of the Internet handles.
::InternetCloseHandle(hHttpFile); 
::InternetCloseHandle(hConnect) ;
::InternetCloseHandle(hSession) ; // Display the file in an edit control.
pEditCtrl->SetWindowText(buffer) ; InternetConnect
    InternetConnet函数连接到一个HTTP,FTP或Gopher服务器:
HINTERNET hConnect = ::InternetConnect(
          hSession,                     //1 HINTERNET hInternetSession
          " www.microsoft.com ",          //2 LPCTSTR lpszServerName
          INTERNET_INVALID_PORT_NUMBER, //3 INTERNET_PORT nServerPort
          "",                           //4 LPCTSTR lpszUsername
          "",                           //5 LPCTSTR lpszPassword
          INTERNET_SERVICE_HTTP,        //6 DWORD dwService
          0,                            //7 DWORD dwFlags
          O                             //8 DWORD dwContext
) ;
    第六个参数dwService决定服务类型(HTTP,FTP或Gopher)。在上面的例子中,InternetConnect连接到一个HTTP服务器上,因为dwService被设置成INTERNET_SERVICE_HTTP。第二个参数(设置成 www.microsoft.com )提供了服务器的地址。注意,HTTP地址必须为服务器名作语法分析,InternetOpenUrl为我们作语法分析。第一个参数hInternetSession是从InternetOpen返回的句柄。第四个、第五个参数提供一个用户姓名和密码 。这七个参数没有控制任何标志影响HTTP操作。最后一个参数为状态回调函数提供前后关系的信息。 HttpOpenRequest
    一旦和服务器的连接已经建立,我们打开了想要的文件。HttpOpenRequest和HttpSenRequest一起工作打开文件。HttpOpenRequest去创建一个请求句柄并且把参数存储在句柄中。HttpOpenRequest把请求参数送到HTTP服务器。
HINTERNET hHttpFile = ::HttpOpenRequest(
          hConnect,              // 1 HINTERNET hHttpSession
          "GET",                 // 2 LPCTSTR lpszVerb
          "/MSDN/MSDNINFO/",     // 3 LPCTSTR lpszObjectName
          HTTP_VERSION,          // 4 LPCTSTR lpszVersion
          NULL,                    // 5 LPCTSTR lpszReferer
          0,                     // 6 LPCTSTR FAR * lplpszAcceptTypes
          INTERNET_FLAG_DONT_CACHE, // 7 DWORD dwFlags
          0                      // 8 DWORD dwContext
) ;
    到现在为止,网络函数的许多参数看起来都类似。HttpOpenResult的第一个参数是由InternetConnet返回的   HINTERNET。HttpOpenRequest的第七和第八个参数执行与InternetConnect中有相同名字的参数一样的功能。
    第二个参数(“GET”)指定我们想要得到由第三个参数(“/MSDN/MSDNINFO/”)命名的对象。HTTP版已经传递第四个参数;现在,它肯定是HTTP棗VERSION。因为“GET”是最流行的动词类型,HttpOpenRequest将为这个参数接收一个空指针。
    第五个参数lpszReferer是一个网点的地址。在这个网点上我们发现了我们现在想要看见的URL(统一资源定位)。换而言之,如果你在 www.home.com 上而且单击了跳到 www.microsoft.com 的一个连接,第五个参数就是 www.home.com 。因为它使你指向了目标URL(统一资源定位)。这个值可以为空。第六个参数执行一个我们的程序接收的文件类型列表。把空值传递给HttpOpenRequest即通知了服务器只有文本文件可以被接收。   HttpSendRequest 除了传送请求外,HttpSendRequest允许你传送额外的HTTP标题给服务器。关于HTTP标题的信息可以在 http://www.w3.org/  上的最新的说明上找到。在这个例子中,HttpSendRequest的所有参数都被传递为缺省值。 BOOL bSendRequest = ::HttpSendRequest(
     hHttpFile, // 1 HINTERNET hHttpRequest
     NULL,      // 2 LPCTSTR lpszHeaders
     0,         // 3 DWORD dwHeadersLength
     0,         // 4 LPVOID lpOptional
     0          // 5 DWORD dwOptionalLength
);
HttpQueryInfo 为了得到关于文件的信息,在调用HttpSendRequest后使用HttpQueryInfo函数: BOOL bQuery = ::HttpQueryInfo(
     hHttpFile,                 // 1 HINTERNET hHttpRequest
     HTTP_QUERY_CONTENT_LENGTH, // 2 DWORD dwInfoLevel
     bufQuery,                  // 3 LPVOID lpvBuffer
     &dwLengthBufQuery          // 4 LPDWORD lpdwBufferLength
) ;
查询的结构是字符串或lpvBuffer中的字符串列表。HTTP_QUERY_CONTENT_LENGTH查询得到文件的长度。你可以使用HttpQueryInfo查询大范围的信息。

总结

Win32网络函数使从FTP,Gopher和HTTP服务器上读取信息就想从你的硬盘驱动器上读取信息一样容易。仅仅使用4个函数棗InternetOpen,InternetOpenUrl,InternetReadFile和InternetCloseHandle和很少的HTTP知识,你就可以写一个简单的网络浏览器。 把这个简单的浏览器变成一个工业性质的浏览器将要花费很多工作,包括 一些对HTTP的了解,对如何显示HTML文件的了解和以及使用多线程方式的能力。Win32网络函数将开发者从与TCP/IP,Windows Sockets和HTTP编程有关的大多数烦闷工作中解脱出来
InterNetOpenA函数会产生的行为 阅读详情

相关推荐

Win32 API全面开发指南及实战应用

Win32 API,即Windows 32位应用程序编程接口,是Windows操作系统中用于开发Windows应用程序的一套函数库。自从Windows 95的发布,Win32 API就成为了Windows程序设计的标准。其设计哲学强调了程序与系统的紧密集成,提供了一系列的函数和宏,用于处理用户输入、绘图、文件管理、进程管理等任务。系统级API是提供底层操作系统服务的接口。这些API允许开发者执行如进程创建、文件操作、内存管理等基本操作,它们是构建复杂应用程序时不可或缺的基础组件。

weixin_42451850的博客 1375

InternetOpen

参考链接:msdn.microsoft.com/en-us/library/windows/desktop/aa383996(v=vs.85).aspx 为了使网络连接生效,必须用函数InternetOpen函数创建一个HINTERNET根句柄。InternetOpen函数接收的参数为:用户代理信息(访问Internet函数的应用),访问网络的类型,代理主机和地址以及代理的行为动作。 用户代理

lyhdez2的专栏 5636

Win32API大全:全面的中文编程接口参考

本文还有配套的精品资源,点击获取 简介:《Win32API大全》是一本覆盖广泛Windows编程接口的参考书,详细介绍了如何利用Win32 API进行系统级编程。它涵盖了从系统服务、用户界面、文件和注册表操作到图形设备接口、设备输入、网络编程、安全与权限、多媒体支持、调试与错误处理以及国际化与本地化等多个关键领域。这本书不仅解释了每个API函数的用法、参数和返回值,还附带实...

weixin_31419153的博客 1210

InternetOpenUrl函数 的应用

 通过一个完整的FTP,Gopher或HTTP网址打开一个资源。HINTERNET InternetOpenUrl (__in HINTERNET hInternet ,__in LPCTSTR lpszUrl ,__in LPCTSTR lpszHeaders ,__in DWORD值dwHeadersLength ,__in的DWORD dwFlags ,__in DWORD_PTR

rbagglo的专栏 8377

InternetOpen InternetOpenUrl InternetReadFile 和 InternetCloseHandle

InternetOpen 函数功能 初始化应用程序对WinINet函数的使用 函数声明 INTERNETAPI_(HINTERNET) InternetOpenA( _In_opt_ LPCSTR lpszAgent, _In_ DWORD dwAccessType, _In_opt_ LPCSTR lpszProxy, _In_opt_ LPCSTR lpszProxyBypass, _In_ DWORD dwFlags ); 第一个参数 指向以null终

寻梦&之璐 4238

cmp 字节 汇编_Win32汇编系列十,网络操作之读取数据

自从开始上次Win32汇编系列结束已经有些年头了,期间也在接触其他新东西,所以把Win32汇编系列暂时放在了后面,后面会更新Linux下汇编,介绍NASM,本章来学习下汇编环境下的网络请求,也就是读取远程服务器中的数据,据我知道的有两种办法,一是创建Socket,但是同时还要构建HTTP请求信息,然后在发送给服务器,接收的时候还要解析HTTP响应信息,把响应体分割出来,显然有些麻烦,更何...

weixin_30402231的博客 379

win32汇编环境,对线程的创建与操作示例一

线程是主进程之外并行运行着的过程,很多的时候,我们需要一些运算保持运行,但又不能影响进程,这个时候就需要线程

一品人家的博客 698

树莓派操作系统安装指南:win32diskimage、SDformatter与Raspbian

SDformatter不仅提供基本的格式化功能,还包含一些高级选项,使用户能够自定义格式化过程。树莓派支持许多定制化的配置选项,您可以在中进行更改,例如启用摄像头支持、调整分辨率或更改GPIO引脚的默认设置。本章详细介绍了树莓派系统重装的完整步骤,包括系统备份与清理、具体的重装操作流程以及重装后进行的优化与调整。在备份重要数据和清理系统文件之后,我们可以通过写入新镜像、配置树莓派并进行首次启动来重装系统。而重装后,适当的优化设置以及安装所需软件包和功能能让您的树莓派重新焕发活力。

weixin_31659095的博客 1225

面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

  基础篇:操作系统、计算机网络、设计模式          提高篇:WIN32、MFC与Linux          算法篇:算法与数据结构            一:操作系统     一: WIN32     一:算法     二:计算机网络     二:MFC     二:数据结构     三:设计模式     三:Linux基本命令 ...

杨氏计算机知识整理 238

Win32汇编系统函数(5)

title: Win32汇编系统函数(5) date: 2019-04-20 09:57:38 tags: 汇编语言 categories: 汇编语言 copyright: true --- 汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址...

weixin_30750335的博客 432

Win32 网络API使用详细说明

说明:项目中要用到HTTP代理,网上找了些资料,发现此文不错,转之以备用 本文转自:http://www.cnblogs.com/EricYang/archive/2010/09/26/1836365.html HTTP Sessions MSDN -----------

呆龙的专栏 1406

ostinato-bin-win32-0.9发包工具

ostinato-bin-win32-0.9发包工具 【下载地址】ostinato-bin-win32-0.9发包工具 ostinato-bin-win32-0.9是一款功能强大的网络报文发送工具,专为网络测试和调试设计。它支持多种报文类型的灵活发送,并提供实时统计功能,帮助用户轻松监控报文发送情况。工具界面简洁,操作直...

gitblog_06745的博客 556

Win32 API下C语言多线程编程示例

多线程(Multithreading)是指在同一个程序内同时运行多个线程执行不同的任务,以达到提高程序运行效率和响应速度的目的。每个线程可以看作是独立的执行路径,能够在同一进程的上下文中共享资源和数据。Windows操作系统通过提供一组丰富的API来管理线程,即Windows API(Application Programming Interface),通常被称为Win32 API。Win32 API允许开发者创建、管理和终止线程,同时提供了控制线程同步和通信的功能。

weixin_42575109的博客 887

Win32汇编:常用系统API函数

熟练掌握Win32 API函数的参数传递,是软件逆向的基础,本章节内容将使用MASM汇编器,逐个编译这些源程序,你可以通过使用一些调试工具,这里推荐OllyDBG来附加编译后的可执行文件,进行逐个分析,观察二进制程序逆向后的一些变化,总结吸收经验,为以后的二进制逆向,漏洞挖掘打基础.

微软技术分享 1万+

Win32 API概述

Win32 API 概述        Win32 API英文全称为The Microsoft Win32 Application Programming Interface,即Microsoft 32位平台应用程序编程接口。利用Win32 API可以开发出在所有的微软32位操作系统上成功运行的程序,而且还可以利用各个系统提供的独特的特性和功能。在编程当中特殊功能的实现取决于系统平台潜在的特性。

jian_chi的专栏 831

Python模块——_winreg操作注册表

From: http://blog.sina.com.cn/s/blog_4b5039210100gmsb.html      用python操作修改windows注册表,显然要比用C或者C++简单。     主要参考资料:官方文档:http://docs.python.org/library/_winreg.html 通过python操作注册表主要有两种方式,一种是通过python的

JoeBlackZQQ的专栏 1万+

hooksendrecvwsasendwsarecv封包工具源码:网络数据监控的利器

hooksendrecvwsasendwsarecv封包工具源码:网络数据监控的利器 【下载地址】hooksendrecvwsasendwsarecv封包工具源码 此开源项目提供了一套hook send、recv、wsasend、wsarecv封包工具的完整源码,专为开发者设计。通过远程线程注入技术,工具能够高效稳定地将...

gitblog_06788的博客 1012
上一篇: duilib消息处理
下一篇: win32 console程序的编写和相关细节
小人物2014
博客等级 码龄19年 66粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值