socket

zmq初次使用

僤鯓⒐⒋嵵緔 提交于 2020-01-29 00:53:34
文章目录 传统网络通信 zmq是什么 传统网络通信 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 对着这个图就很简单了: 服务端: 肯定要有一个socket然后绑定fd和ip,port,当然这时候需要转换成网络字节序,然后一堆操作,绑定完成以后就用这个fd去监听这个端口,开启listen,然后等待连接就是调用accept阻塞在这里等待连接,客户端连接后循环阻塞读写。 客户端: 先要填充好socket,然后调用connect连接服务端,也要带上ip和端口号,建立连接以后,用write和read读写,最后关闭套接字。 可以看到这种网络模型有很多问题要解决: 阻塞I/O:也就是说服务端或者客户端的读写都会阻塞,这样毫无疑问程序太死板。 多路复用:服务端要解决I/O多路复用,也就是可以处理多个客户端,比如epoll,select,poll等多路复用技术。 信号事件驱动I/O:也就是说当有I/O时采取通知机制,而不是轮询。 异步I/O:异步进行I/O操作,因为读写都会耗时,这不利于高并发的服务器开发,可以采取多线程。 而且在传统这种网络编程中,socket细节还比较复杂,并且需要自行解决分包组包,粘包,异常重连,消息缓存,消息加密,且TCP是一对一连接,就是一个socket只能有有一个连接。 那么接下来就介绍一个zmq的基本使用,它帮我们解决了这些问题。 zmq是什么

socket服务器简易连接

岁酱吖の 提交于 2020-01-28 23:54:14
1.socket:创建socket伪文件生成文件描述符fd 2.bind: 给fd绑定端口和ip; 3.listen;给当前socket设置最大客户端链接 4.accept:阻塞等待客户端连接;生成客户端的fd,addr结构体(客户端端口,ip等内容) 5.read:读数据 6.write:写数据 7.close:关闭服务器的socket和客户端的socket; # include <stdio.h> 2 #include < stdlib . h > 3 #include < string . h > 4 #include < unistd . h > 5 #include < sys / types . h > 6 #include < sys / socket . h > 7 #include < ctype . h > 8 #include < netinet / in . h > 9 #include < arpa / inet . h > 10 #define SERVER_PORT 8000 11 int main ( ) 12 { 13 int lfd , cfd ; 14 struct sockaddr_in addr ; 15 struct sockaddr_in caddr ; 16 lfd = socket ( AF_INET , SOCK_STREAM ,

刷题记录:ctf473831530_2018_web_virink_web

好久不见. 提交于 2020-01-28 22:04:29
目录 刷题记录:ctf473831530_2018_web_virink_web 知识点 限制字符数量写shell 内网探测 PHP-FPM未授权访问漏洞 rsync未授权访问漏洞 刷题记录:ctf473831530_2018_web_virink_web 题目复现链接: https://buuoj.cn/challenges 参考链接: BUUOJ刷题-Web-ctf473831530_2018_web_virink_web 知识点 限制字符数量写shell 仅用20个字符想完成后面复杂的操作肯定是不可能的,这里可以使用 >filename + ls -tr>1.sh 的方法写shell,也可以直接 echo "xxx">1.php 内网探测 首先查看 /proc/net/fib_trie Main: +-- 0.0.0.0/0 2 0 2 +-- 127.0.0.0/8 2 0 2 +-- 127.0.0.0/31 1 0 0 |-- 127.0.0.0 /32 link BROADCAST /8 host LOCAL |-- 127.0.0.1 /32 host LOCAL |-- 127.255.255.255 /32 link BROADCAST +-- 173.165.232.0/24 2 0 2 +-- 173.165.232.0/28 2 0 2 |-- 173

Socket、TCP和UDP协议、端口含义

一曲冷凌霜 提交于 2020-01-28 17:00:30
1、如何理解Socket 两台计算机相互通讯靠的就是Socket,类似于2个人通讯要靠电话,也就是说Socket就是程序之间的电话。Socket英文意思是孔、插座,作为进程通讯机制,取后一种意思,通常也成为套子节,用于描述IP地址和端口。IP地址指向某台服务器,端口用于连接到某一个应用程序。 socket在通讯过程中所处位置(作用)理解: 比如上图所示: 男生要到女生宿舍找自己女朋友出去玩,不能直接进入女生宿舍去找,要经过宿管大妈,由宿管大妈打电话告知你的女朋友,电话打通后你们之间再进行通话了。这里宿管大妈就是负责监听的Socket,如果有男生(客户端发送请求)来了就创建一个负责通信的socket(电话机),从而使该男生(客户端)与对应女生(服务端某应用程序)可以通信了。socket开始就是服务器端负责监听的(相当于宿管大妈),看有没有客户端发送请求到服务器端,有的话就创建一个负责通信的Socket。Socket接口是TCP/IP网络最为通用的API,也是在INTERNET上进行应用开发最为通用的API。 2、TCP协议和DUP协议 协议 :类似于两个人打电话有一个默认协议就是都说普通话,如果大家都说家乡话,可能都听不懂,在网络中常用的协议有:UDP和TCP协议。 TCP/IP协议 :Transmission Control Protocol/Internet Protocol

flick1 靶机渗透

牧云@^-^@ 提交于 2020-01-28 12:48:09
前言 比较老的靶机了(2014发布),但很经典,确实学到了很多东西。通过这个靶机接触到一些docker逃逸的东西。 知识点 base64编码 目录遍历(双写 ../ ) Laravel(php框架) sqlite泄露 ssh伪造密匙 docker逃逸 详细过程 信息搜集 常规端口扫描,就不贴图了,只发现了 22 , 8881 两个端口。首先按看一下8881端口的情况,需要输入口令才能开启新的门,但我们不知道口令是什么。 先放着,再看 22 端口,先试着连接ssh,发现如下不明字符串。末尾为 \x3d ,推测为 base64 编码。 使用大厨经16次base64解码后得到明文字符串。 tabupJievas8Knoj ,输入8881端口,80端口开放。 访问80web服务,web框架为Laravel 接着想到目录扫描,该web服务有一个问题就是我们输入错误的或者不存在的地址时会跳转到一个可列目录的位置,但我们点击目录则没有反应。所以一些通过返回响应码来判断目录存在的扫描器,无法使用。dirsearch还是可以使用的但确实没有扫到什么有价值的东西。 看一下页面功能。似乎是一个上传图片并展示的网站。存在登陆页面,但我们不知道用户名和密码。不过旁边有提示,这就要看自己的悟性了,能不能猜到用户名是 demo 。不过这里可以使用 cewl 收集社工字典。 社工字典加数字得到密码。 demo

TCP协议随笔

走远了吗. 提交于 2020-01-28 11:31:05
相关知识点记录: listen中blog参数介绍 listen_blog介绍 /* limit the "backlog" parameter to fit in an u8_t */ backlog = LWIP_MIN ( LWIP_MAX ( backlog , 0 ) , 0xff ) ; err = netconn_listen_with_backlog ( sock -> conn , ( u8_t ) backlog ) ; 1、其backlog是一个建议值,用于指定内部的队列大小,以控制同时建立的连接请求数量。 2、针对控制连接这个需求,有两种方法实现这个backlog: (1)单一队列来控制连接。队列中既包含了SYN_RCVD的状态,也包含了ESTABLISHED状态。accept只处理后面一种状态。如果三次握手中的ACK到来,则会在队列中直接改其状态。显然,这时backlog为这一队列的长度。 (2)两个单独队列来控制。两种状态分别实现单独的队列。显然这种情况下,两个队列都必须有明确的大小限制,backlog只能限制其中一个。 tcpip协议栈相关知识链接: lwip socket探秘之listen lwip socket探秘之bind lwip socket探秘之socket创建 lwip socket探秘之accept lwip socket探秘之recv

Java网络编程Socket通信

三世轮回 提交于 2020-01-28 10:43:02
TCP(Transmission Control Protocol 传输控制协议 )是一种面向连接的、可靠的、基于字节流的传输层通信协议 UDP (User Datagram Protocol 用户数据报协议)是OSI(Open System Interconnection开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务 TCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP保证数据正确性,UDP可能丢包 6.TCP保证数据顺序,UDP不保证 一、Tcp协议通信 1、Server服务器端: a、创建ServerSocket对象,同时绑定监听端口 b、通过accept()方法监听客户端的请求 c、建立连接后,通过输入流读取客户端发送的请求信息 d、通过输出流向客户端发送响应信息 e、关闭相应资源 package com.yyx.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import

python 创建简单web服务器笔记

◇◆丶佛笑我妖孽 提交于 2020-01-28 07:03:37
Python创建简单web服务器 步骤: 创建TCP服务端 1、导入套接字模块(socket) 2、创建套接字 3、设置地址重用 4、绑定端口 5、设置监听,让套接字由主动变为被动接收 6、接受客户端连接 定义函数 request_handler() 7、接收客户端浏览器发送的请求协议 8、判断协议是否为空 9、拼接响应的报文 10、发送响应报文 11、关闭操作 运行python web服务器 浏览器进行访问(我设置的端口号为8081) 即可展现如下图的hello world 定义主函数main() 1、导入套接字模块(socket) 2、创建套接字 import socket # 参数 # socket.AF_INET --- IPV4 # socket.SOCK_STREAM --- tcp tcp_server_socket = socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) 3、设置地址重用 # 当前套接字 地址重用 值True tcp_server_socket . setsockopt ( socket . SOL_SOCKET , socket . SO_REUSEADDR , True ) 4、绑定端口 5、设置监听,让套接字由主动变为被动接收 tcp_server_socket . bind

【yasio】轻量级跨平台socket库v3.31.2发布

我的未来我决定 提交于 2020-01-28 03:20:47
yasio-3.31.2[stable]更新 优化单利类模板实现,详见: https://github.com/simdsoft/yasio/issues/200 修正配置宏拼写YASIO_VERBOS_LOG修正为YASIO_VERBOSE_LOG. 调用bsd socket API getaddrinfo 解析域名时明确传入socktype, 默认值SOCK_STREAM, 避免在mac或linux返回多个相同IP地址 , 详见: https://github.com/simdsoft/yasio/issues/201 增强socket API包装类xxsocket的超时发送和接受API: send_n/recv_n实现, 详见: https://github.com/simdsoft/yasio/issues/202 来源: CSDN 作者: simdsoft 链接: https://blog.csdn.net/xyzzf/article/details/104039227

TCP 通信

a 夏天 提交于 2020-01-28 02:24:12
高级编程技巧 学习笔记 一、TCP 1.1、TCP 介绍 TCP协议,传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。 TCP通信需要经过创建连接、数据传送、终止连接三个步骤。 TCP通信模型中,在通信开始之前,一定要先建立相关连接,才能发生数据。 1.2、TCP 特点 面向连接 通信双方必须先建立连接才能进行数据的传输 可靠传输 (1)TCP采用发送应答机制 (2)超时重传 (3)错误校验 (4)流量控制和阻塞管理 二、TCP 客户端 与 服务端 服务端: 就是提供服务的一方。 客户端: 就是需要被服务的一方。 2.1、TCP客户端构建流程 创建 socket 链接服务器 接收数据(最大接收2014个字节) 关闭套接字 import socket # from socket import * def main ( ) : # 创建TCP套接字(使用不同的导入方式, 则用不同的创建形式) tcp_client = socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) # tcp_client = socket(AF_INET, SOCK_STREAM) server_ip = input ( "server ip:" ) server_port = int ( input ( "server