首页
学习
活动
专区
圈层
工具
发布

Windows中如何在父子进程间传递SOCKET句柄

0x00 背景 Linux由于一切皆文件,不管是文件、管道,还是socket,都可以轻易在父子进程间传递;而Windows上会复杂很多。...最近有个需求,需要进行父子进程间的通信,常见的方案是在创建子进程时通过stdin、stdout、stderr这三个句柄来传递管道句柄,从而达到父子进程间通信的目的。...经过调研之后,放弃了管道这种方式,因为匿名管道不支持异步读写,不符合我们的使用场景。然后,考虑将SOCKET句柄传递给子进程,进而进行通信。...source_process_handle = _winapi.OpenProcess( _winapi.PROCESS_DUP_HANDLE, False, source_pid)...winapi.GetCurrentProcess(), 0, False, _winapi.DUPLICATE_SAME_ACCESS | _winapi.DUPLICATE_CLOSE_SOURCE

90110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Windows进程通信之一看就懂的匿名管道通信

    目录 进程通信之一看就懂的匿名管道通信 一丶匿名管道 1.1何为匿名管道 1.2创建匿名管道需要注意的事项 1.3 创建匿名管道需要的步骤 1.4代码例子 1.5代码运行截图 进程通信之一看就懂的匿名管道通信...一丶匿名管道 1.1何为匿名管道 匿名管道是用来父进程跟子进程通信的.还有一种是命名管道.不需要父子进程就可以进行通信的.今天先说匿名管道的....匿名管道. 就是父进程创建子进程....读取子进程数据.或者给子进程发送数据.当然子进程也可以给父进程发送数据.以及读取父进程发送过来的数据. 1.2创建匿名管道需要注意的事项 创建匿名管道,首先你要明白什么是管道....那么反正子进程写的话也是使用第一个管道.因为子进程写.我们父进程才能读. 1.3 创建匿名管道需要的步骤 首先你需要了解创建匿名管道的API WINBASEAPI BOOL WINAPI CreatePipe

    2.4K30

    WindowsAPI 之 CreatePipe、CreateProcess

    BOOL WINAPI CreatePipe( _Out_ PHANDLE hReadPipe, _Out_ PHANDLE...比如,某网友写了一个重定向程序将stdout重定向到自己写的一个窗口中,就会产生如下的效果: 图片 先详细介绍一下管道,这里以匿名管道为例: 第一:匿名管道只能实现本地进程之间的通信,不能实现跨网络之间的进程间的通信...匿名管道主要用于本地父进程和子进程之间的通信,在父进程中的话,首先是要创建一个匿名管道,在创建匿名管道成功后,可以获取到对这个匿名管道的读写句柄,然后父进程就可以向这个匿名管道中写入数据和读取数据了,但是如果要实现的是父子进程通信的话...同时在创建子进程的时候,必须将子进程的标准输入句柄设置为父进程中创建匿名管道时得到的读管道句柄,将子进程的标准输出句柄设置为父进程中创建匿名管道时得到的写管道句柄。然后在子进程就可以读写匿名管道了。...匿名管道将在读、写句柄都被关闭后退出,也可以在进程中调用 CloseHandle()函数来关闭此句柄(个人理解就是,匿名管道,只能是你全部往管道中读写完之前,就不能干别的事,只能写或等待(管道满的时候处在等待状态

    4.9K10

    GetLastError错误代码

    〖2〗-系统找不到指定的文件。   〖3〗-系统找不到指定的路径。   〖4〗-系统无法打开文件。   〖5〗-拒绝访问。   〖6〗-句柄无效。   〖7〗-存储控制块被损坏。   ...〖230〗-管道状态无效。   〖231〗-所有的管道实例都在使用中。   〖232〗-管道正在关闭中。   〖233〗-管道的另一端上无任何进程。   〖234〗-更多数据可用。   ...〖301〗-系统接收了一个无效的操作锁定确认。   〖487〗-试图访问无效的地址。   〖534〗-算术结果超过 32 位。   〖535〗-管道的另一端有一进程。   ...〖1346〗-指定的模拟级别无效, 或所提供的模拟级别无效。   〖1347〗-无法打开匿名级安全令牌。   〖1348〗-请求的验证信息类别无效。   ...〖1367〗-登录请求包含无效的登录类型值。   〖1368〗-在使用命名管道读取数据之前,无法经由该管道模拟。   〖1369〗-注册表子树的事务处理状态与请求状态不一致。

    8.8K10

    Windows错误码大全error code

    0230 管道状态无效。 0231 所有的管道实例都处于忙状态。 0232 管道正在关闭。 0233 在管道的另一端没有进程。 0234 有更多可用的数据。 0240 已取消会话。...1346 或者没有提供所申请的模仿级别,或者提供的模仿级别无效。 1347 无法打开匿名级安全性符号。 1348 所请求的验证信息类别无效。 1349 该类符号不能以所尝试的方式使用。...1367 登录请求包含无效的登录类型值。 1368 在使用命名管道读取数据之前,无法经由该管道模拟。 1369 注册表子树的事务状态与所请求的操作不兼容。...1831 试图在 RPC 管道对象上进行无效操作。 1832 不被支持的 RPC 管道版本。 1898 找不到组成员。 1899 无法创建终结点映射数据库条目。...1914 无效的异步远程过程调用句柄。 1915 这个操作的异步 RPC 调用句柄不正确。 1916 RPC 管道对象已经关闭。 1917 RPC 调用在全部的管道都被处理之前完成。

    13.8K10

    win2003服务器安全设置教程

    7、配置帐户锁定策略(在运行中输入gpedit.msc回车,打开组策略编辑器,选择计算机配置-Windows设置-安全设置-账户策略-账户锁定策略,将账户设为“三次登陆无效”,“锁定时间30分钟”,“复位锁定计数设为...8、在安全设置里本地策略-安全选项将 网络访问:可匿名访问的共享; 网络访问:可匿名访问的命名管道; 网络访问:可远程访问的注册表路径; 网络访问:可远程访问的注册表路径和子路径;...tftp.exe netstat.exe regedit.exe at.exe attrib.exe cacls.exe format.com c.exe 特殊文件 有可能在你的计算机上找不到此文件...7、配置帐户锁定策略(在运行中输入gpedit.msc回车,打开组策略编辑器,选择计算机配置-Windows设置-安全设置-账户策略-账户锁定策略,将账户设为“三次登陆无效”,“锁定时间30分钟”,“复位锁定计数设为...8、在安全设置里本地策略-安全选项将 网络访问:可匿名访问的共享; 网络访问:可匿名访问的命名管道; 网络访问:可远程访问的注册表路径; 网络访问:可远程访问的注册表路径和子路径;

    3.9K40

    1.12 进程注入ShellCode套接字

    在网络通信中,套接字就像一条传送数据的管道,负责数据的传输和接收。而socket(套接字)是在网络通信中最常用的一种通信协议,它定义了一组用于网络通信的API。...// Kernel32 调用约定定义 typedef HMODULE(WINAPI* LOADLIBRARY)(LPCTSTR lpFileName); typedef FARPROC(WINAPI*...// Kernel32 调用约定定义 typedef HMODULE(WINAPI* LOADLIBRARY)(LPCTSTR lpFileName); typedef FARPROC(WINAPI*...但是上述提到的这些功能并不具备真正的意义,而本章将继续延申,并实现一种可被连接的正向ShellShell,在此案例中读者需要理解一种绑定技术,在默认情况下,Windows系统中的每一个进程都存在标准输入、输出和错误流的匿名管道...,而cmd.exe进程同样存在这三种管道,要实现正向Shell,一般而言攻击者会创建一个监听指定端口的网络套接字,并将其绑定到一个命令行解释器(如 cmd.exe)的标准输入和输出流上,这样攻击者即可通过这个管道来使用远程的

    50340

    1.12 进程注入ShellCode套接字

    在网络通信中,套接字就像一条传送数据的管道,负责数据的传输和接收。而socket(套接字)是在网络通信中最常用的一种通信协议,它定义了一组用于网络通信的API。...但是上述提到的这些功能并不具备真正的意义,而本章将继续延申,并实现一种可被连接的正向ShellShell,在此案例中读者需要理解一种绑定技术,在默认情况下,Windows系统中的每一个进程都存在标准输入、输出和错误流的匿名管道...,而cmd.exe进程同样存在这三种管道,要实现正向Shell,一般而言攻击者会创建一个监听指定端口的网络套接字,并将其绑定到一个命令行解释器(如 cmd.exe)的标准输入和输出流上,这样攻击者即可通过这个管道来使用远程的...* LOADLIBRARY)(LPCTSTR);typedef FARPROC(WINAPI* GETPROCADDRESS) (HMODULE, LPCSTR);typedef int (WINAPI...*, int*);typedef int (WINAPI* LISTEN) (SOCKET, int);typedef int (WINAPI* WSASTARTUP) (WORD, LPWSADATA

    66840

    红队 | Windows命名管道

    那么实际上管道就是一个内核对象,实现原理就是进程间有一块公共的内存 在windwos操作系统中,管道有两种: 匿名管道Anonymous pipes:匿名管道是基于字符和半双工的(即单向),只能本地使用...可通过名称引用;支持多客户端连接;支持双向通信;支持异步重叠 I/O 匿名管道由于只能在本地使用,操作空间较少,本文主要探讨命名管道 查看管道列表 想要查看管道列表需要具有一定的本地操作权限。...在 windows server 2003 及以下的版本中,默认开启了匿名管道通信;win2003之后的系统默认禁止匿名管道通信。...windows server 2003 的默认本地策略,默认允许部分管道匿名访问。 ? 而windows server 2008 的默认本地策略,完全禁止匿名访问管道。 ?...而大于win2003的机器,默认是关闭了所有的可匿名访问的命名管道,所有用这些工具打win2003之后的系统会提示找不到Named Pipe。 ?

    2.5K20

    米哈游,顺利进入二面!

    最简单的方式就是管道,管道分为「匿名管道」和「命名管道」。...匿名管道顾名思义,它没有名字标识,匿名管道是特殊文件只存在于内存,没有存在于文件系统中,shell 命令中的「|」竖线就是匿名管道,通信的数据是无格式的流并且大小受限,通信的方式是单向的,数据只能在一个方向上流动...,如果要双向通信,需要创建两个管道,再来匿名管道是只能用于存在父子关系的进程间通信,匿名管道的生命周期随着进程创建而建立,随着进程终止而消失。...命名管道突破了匿名管道只能在亲缘关系进程间的通信限制,因为使用命名管道的前提,需要在文件系统创建一个类型为 p 的设备文件,那么毫无关系的进程就可以通过这个设备文件进行通信。...另外,不管是匿名管道还是命名管道,进程写入的数据都是缓存在内核中,另一个进程读取数据时候自然也是从内核中获取,同时通信数据都遵循先进先出原则。

    71710

    【精讲】2022年PHP中高级面试题

    管道 2. 信号 3. 消息队列 Posix 消息队列 4. 共享内存 5....https://www.php.net/manual/zh/migration70.new-features.php 简要总结就是: 标量类型声明、返回值类型声明、通过 define() 定义常量数组、匿名类...则会到源服务器进行有效性校验,如果源服务器资源没有变化,则会返回304,同时不返回内容;如果有变 化,则返回200; 500 代码 文件权限 资源有问题 501 请求方法服务器不支持 502 网关错误,例如得到了一个无效响应一类的就会出现这种错误...503 超载或者维护模式 504 网关超时,即在指定时间内没有正确的响应 499 客户端关闭请求,例如客户端请求 1s 内结束,php 未返回结果,或者找不到要请 求的地址,会返回 499 错误

    1.5K20

    【Linux系统编程】进程间通信:管道+共享内存

    2,进程间通信的方式 管道:匿名管道pipe,命名管道 System V IPC:System V 消息队列,System V 共享内存,System V 信号量 POSIX IPC:消息队列,共享内存...,信号量,互斥量,条件变量,读写锁 二,匿名管道 管道是Unix中最古老的进程间通信的形式。...管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道。 三,命名管道 匿名管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。...if (strcmp(argv[1], "reader") == 0) { return reader(); } else { fprintf(stderr, "无效参数...if (strcmp(argv[1], "reader") == 0) { return reader(); } else { fprintf(stderr, "无效参数

    17210
    领券