socket函数

远程加载shellcode实现分离免杀

感情迁移 提交于 2020-01-09 13:10:04
客户端: #include <stdio.h> #include <iostream> #include <WinSock2.h> #pragma comment(lib, "ws2_32.lib") //添加ws2_32动态库 #pragma warning(disable:4996) //忽略旧函数使用的警告 using namespace std; int main(int argc, char *argv[]) { const int BUF_SIZE = 1024; WSADATA wsd; //WSADATA变量 SOCKET sHost; // 服务器套接字socket SOCKADDR_IN servAddr; //服务器地址 char buf[BUF_SIZE]; // 存放发送的数据缓冲区 char bufRecv[BUF_SIZE]; //接收收到的数据缓冲区 DWORD dwThreadId; HANDLE hThread; DWORD dwOldProtect; int retVal; // 返回值 if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) //初始化套结字动态库 { cout << "WSAStartup failed!" << endl; return -1; } sHost = socket(AF_INET

Apache Structured Streaming_JZZ158_MBY

左心房为你撑大大i 提交于 2020-01-09 00:53:26
Structured Streaming 什么是Structured Streaming 泛指使用SQL操作Spark的流处理。Structured Streaming是一个scalable 和 fault-tolerant 流处理引擎,该引擎是构建Spark SQL之上。可以使得用户以静态批处理的方式去计算流处理。Structured Streaming底层毁掉用SparkSQL 引擎对流数据做增量和持续的更新计算并且输出最终结果。用户可以使用 Dataset/DataFrame API 完成流处理中的常见问题:aggregations-聚合统计、event-time window-事件窗口、stream-to-batch/stream-to-stream join连接等功能。Structured Streaming可以通过 checkpointing (检查点)和 Write-Ahead Logs(写前日志)机制实现end-to-end(端到端)、exactly-once(进准一次)语义容错机制。总之Structured Streaming提供了 快速、可扩展、容错、端到端的精准一次的流处理,无需用户过多的干预。 Structured Streaming底层计算引擎默认采取的是 micro-batch 处理引擎(DStream一致的)

Apache Thrift系列详解(二) - 网络服务模型

坚强是说给别人听的谎言 提交于 2020-01-08 12:24:39
前言 Thrift 提供的网络服务模型:单线程、多线程、事件驱动,从另一个角度划分为:阻塞服务模型、非阻塞服务模型。 阻塞服务模型: TSimpleServer 、 TThreadPoolServer 。 非阻塞服务模型: TNonblockingServer 、 THsHaServer 和 TThreadedSelectorServer 。 TServer 类的层次关系: 正文 TServer TServer 定义了静态内部类 Args , Args 继承自抽象类 AbstractServerArgs 。 AbstractServerArgs 采用了建造者模式,向 TServer 提供各种工厂: 工厂属性 工厂类型 作用 ProcessorFactory TProcessorFactory 处理层工厂类,用于具体的TProcessor对象的创建 InputTransportFactory TTransportFactory 传输层输入工厂类,用于具体的TTransport对象的创建 OutputTransportFactory TTransportFactory 传输层输出工厂类,用于具体的TTransport对象的创建 InputProtocolFactory TProtocolFactory 协议层输入工厂类,用于具体的TProtocol对象的创建

第 12 章 python并发编程之协程

烂漫一生 提交于 2020-01-04 05:11:44
一、引子 主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只用一个)情况下实现并发,并发的本质: 切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长。 1:其中第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实现看起来所有任务都被“同时”执行的效果,如果多个任务都是纯计算的,这种切换反而会降低效率,为此我们可以基于yield来验证。yield本身就是一种在单线程下可以保存任务运行状态的方法: #1 yiled可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级 #2 send可以把一个函数的结果传给另外一个函数,以此实现单线程内程序之间的切换 1 #串行执行 2 import time 3 def consumer(res): 4 '''任务1:接收数据,处理数据''' 5 pass 6 7 def producer(): 8 '''任务2:生产数据''' 9 res=[] 10 for i in range(10000000): 11 res.append(i) 12 return res 13 14 start=time.time() 15 #串行执行 16 res=producer()

python之协程

心不动则不痛 提交于 2020-01-04 05:11:02
一、协程理论 1.1 协程产生的背景 之前我们学习了线程、进程的概念,了解了在操作系统中 进程是资源分配的最小单位,线程是CPU执行的最小单位。 随着我们对于效率的追求不断提高, 基于单线程来实现并发 又成为一个新的课题,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发。这样就可以节省创建线进程所消耗的时间。 本节我们就基于单线程来实现并发,首先我们要回顾一下并发的本质: 切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制) (1)该任务发生了阻塞 (2)该任务计算时间过长或有个更高级的程序替代它 ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态 注意点1 第二种情况本质上并不能提高效率,只是为了cpu能雨露均沾,实现看起来所有任务被“同时”执行,如果多个任务是纯计算的,单纯的切换反而会降低效率。 1.2 yield实现并发 我们通过yield验证,yield本身就是一种在单线程下可以保存任务运行状态的方法,我们来简单复习一下: #1 yiled可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级 #2 send可以把一个函数的结果传给另外一个函数,以此实现单线程内程序之间的切换 yield实现并发的缺点: (1

dnf小小外挂外挂原理及使用

≯℡__Kan透↙ 提交于 2020-01-03 03:26:37
dnf小小外挂几乎所有的中都使用了鼠标来改变角色的位置和方向,玩家仅用一个小小的鼠 标,就可以使角色畅游天下。 那么,我们如何实现在没有玩家的参与下角色也可以自动行走呢。其实实现这个并不 难,仅仅几个Windows API函数就 可以搞定dnf小小外挂,让我们先来认识认识这些API函数。   (1) 模拟鼠标动作API函数mouse_event,它可以实现模拟鼠标按下和放开等动作。     VOID mouse_event(       DWORD dwFlags, // 鼠标动作标识。       DWORD dx, // 鼠标水平方向位置。       DWORD dy, // 鼠标垂直方向位置。       DWORD dwData, // 鼠标轮子转动的数量。       DWORD dwExtraInfo // 一个关联鼠标动作辅加信息。     );   其中,dwFlags表示了各种各样的鼠标动作和点击活动,它的常用取值如下:    MOUSEEVENTF_MOVE 表示模拟鼠标移动事件。    MOUSEEVENTF_LEFTDOWN 表示模拟按下鼠标左键。    MOUSEEVENTF_LEFTUP 表示模拟放开鼠标左键。    MOUSEEVENTF_RIGHTDOWN 表示模拟按下鼠标右键。    MOUSEEVENTF_RIGHTUP 表示模拟放开鼠标右键。

zeromq源码分析笔记之线程间收发命令(2)

时光毁灭记忆、已成空白 提交于 2020-01-03 02:40:56
在 zeromq源码分析笔记之架构 说到了zmq的整体架构,可以看到线程间通信包括两类,一类是用于收发命令,告知对象该调用什么方法去做什么事情,命令的结构由 command_t结构体确定 ;另一类是socket_base_t实例与session的消息通信,消息的结构由 msg_t确定。命令的发送与存储是通过mailbox_t实现的,消息的发送和存储是通过pipe_t实现的,这两个结构都会详细说到,今天先说一下线程间的收发命令。 zeromq的线程可分为两类,一类是io线程,像reaper_t、io_thread_t都属于这一类,这类线程的特点就是内含一个轮询器poller及mailbox_t, 通过 poller 可以 监听激活 mailbox_t的 信号 ;另一类是zmq的socket,所有socket_base_t实例化的对象都可以看做一个单独的线程,这类线程不含poller,但同样含有一个mailbox_t,可以用于收发命令,由于不含poller,只能在每次使用socket_base_t实例的时候先处理一下mailbox_t,看是否有命令需要处理,代码上来看就是每次先调用下面这个函数接收并处理一下命令: int zmq::socket_base_t::process_commands (int timeout_, bool throttle_) 另外

Django

﹥>﹥吖頭↗ 提交于 2020-01-03 00:03:57
第十二章 Django框架 12.1 HTTP协议 12.1.1 HTTP简介 超文本传输协议 Hyper Text Transfer Protocol 是一种用于分布式、协作式和超媒体信息系统的应用层协议 HTTP是万维网的数据通信的基础 HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信 HTTP是一个客户端终端和服务器端请求和响应的标准 12.1.2 HTTP 请求/响应的步骤 客户端连接到Web服务器 一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接 发送HTTP请求 通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成 服务器接受请求并返回HTTP响应 Web服务器解析请求,定位请求资源,服务器将资源复本写到TCP套接字,由客户端读取,一个响应由状态行、响应头部、空行和响应数据4部分组成 释放连接TCP连接 若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求 客户端浏览器解析HTML内容 客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码,然后解析每一个响应头

ping 实现设计---ICMP

江枫思渺然 提交于 2020-01-01 03:42:00
发送ICMP报文时,必须程序自己计算校验和,将它填入ICMP头部对应的域中。 校验和的计算方法:   将数据以字为单位累加到一个双字中,如果数据长度为奇数,最后一个字节将被扩展到字,累加的结果是一个双字,最后将这个双字的高16位,低16位相加后取反,便得到了校验和。 下面是checksum的计算校验和的代码: USHORT checksum(USHORT* buff, int size) { unsigned long cksum = 0; while(size>1) { cksum += *buff++; size -= sizeof(USHORT); } // 是奇数 if(size) { cksum += *(UCHAR*)buff; } // 将32位的chsum高16位和低16位相加,然后取反 cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >> 16); return (USHORT)(~cksum); } Ping程序实例: Ping用来检查主机是否存在,是否可达。 下面是Ping的执行步骤: 1 创建协议类型为IPPROTO_ICMP的原始套接字 2 创建并初始化ICMP封包 3 调用sendto函数向远程主机发送ICMP请求 4 调用recvfrom函数接收ICMP响应 完整代码如下: /////

Web框架

扶醉桌前 提交于 2019-12-31 14:47:57
目录 一, Web框架本质 一, socket服务端 二, HTTP协议对收发消息的格式要求 三, 自定义web框架 二, 服务器程序和应用程序 wsgiref: jinja2: 三, Django 安装: 创建一个django项目: 目录介绍: 运行Django项目: 模板文件配置: 静态文件配置: Django基础必备三件套: 启动Django报错: 一, Web框架本质 这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 一, socket服务端 import socket sk = socket.socket() sk.bind(("127.0.0.1", 80)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(8096) conn.send(b"OK") conn.close() 可以说 Web服务本质上都是在这十几行代码基础上扩展出来的 。这段代码就是它们的祖宗。 用户在浏览器中输入网址,浏览器会向服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定,那互联网还能玩么? 所以,必须有一个统一的规则,让大家发送消息、接收消息的时候都有个格式依据,不能随便写。