socket函数

socket(7)

↘锁芯ラ 提交于 2019-11-28 02:54:15
SOCKET(7) NAME socket —— Linux套接字接口 SYNOPSIS #include <sys/socket.h>sockfd = socket(int socket_family, int socket_type, int protocol); DESCRIPTION 此手册描述Linux网络套接层用户接口。BSD兼容的通用接口位于用户矜持和内核的网络协议栈之间。协议模块以协议族和套接字类型分组,协议族如AF_INET,AF_IPX,AF_PACKET;套接字类型如SOCK_STREAM或SOCK_DGRAM。参见socket(2)以获取更多有关协议族和类型的信息。 套接字层函数 这些函数被用户进程用来发送或接受包以及其它套接字操作。参见它们各自的手册页以了解更多信息。 socket创建一个套接字,connect将一个套接字链接到远程套接字地址,bind将一个套接字绑定到本地套接字地址,listen告诉套接字准备接受连接请求,accept用于获取一个接入连接的套接字。socketpair返回两个互连的匿名套接字(只有少数几个本地协议族的实现像AF_UNIX)。 send,sendto和sendmsg在一个套接字上发送数据,recv,recvfrom和recvmsg从一个套接字接收数据。poll和select等待数据到达或数据发送准备就绪。此外,标准I

python并发网络通信模型

夙愿已清 提交于 2019-11-27 22:08:56
并发网络通信模型 常见网络模型 循环服务器模型:循环接受客户端请求,处理请求.同一时刻只能处理一个请求,处理完毕后在处理下一个 优点:实现简单,占用资源少 缺点:无法同时处理多个客户端请求 适用情况:处理的任务可以很快完成,客户端无需长期占用服务端程序.UDP比TCP更适合循环 多进程/线程网络并发模型:每当一个客户端连接服务器,就创建一个新的进程/线程为该客户端服务,客户端退出时在销毁该进程/线程 优点:能同时满足多个客户端长期占有服务端需求,可以处理各种请求 缺点:资源消耗较大 适用情况:客户端同时连接量较少,需要处理行为较复杂情况 IO并发模型:利用IO多路复用,异步IO等技术,同时处理多个客户端IO请求 优点:资源消耗少,能同时高效处理多个IO行为 缺点:只能处理并发产生的IO事件,无法处理CPU计算 适用情况:HTTP请求,网络传输等都是IO行为 基于fork的多进程网络并发模型 实现步骤 创建监听套接字 等待接受客户端请求 客户端连接创建新的进程处理客户端请求 原进程继续等待其他客户端连接 如果客户端退出,则销毁对应的进程 fork代码示例: 1 from socket import * 2 import os 3 import signal 4 5 ADDR = ('127.0.0.1',8080) 6 7 def han(c): 8 while True: 9

【Django】Web框架本质

跟風遠走 提交于 2019-11-27 20:49:55
目录 根据不同的路径返回不同的内容 普通版 函数版 函数进阶版 返回具体的HTML文件 让网页动态起来 服务器和应用程序 wsgiref 模块 "@ * 我们可以这样理解:所有的==Web应用本质上就是一个socket服务端==,而用户的==浏览器就是一个socket客服端==。** 这样我们就可以自己实现Web框架了: from socket import * sk = socket(AF_INET, SOCK_STREAM) sk.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sk.bind(('127.0.0.1', 8080)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(9000) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 响应状态行 conn.send(b'Hello,world!') conn.close() 可以说Web服务本质上都是在这十几行代码基础上扩展出来的,这段代码就是它们的祖宗。 用户的浏览器一输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定,这互联网还能玩么? 所以,必须有一个统一的规则,让大家发送消息

Socket网络编程--网络爬虫(2)

若如初见. 提交于 2019-11-27 19:24:36
  上一小节,我们实现了下载一个网页。接下来的一步就是使用提取有用的信息。如何提取呢?一个比较好用和常见的方法就是使用正则表达式来提取的。想一想我们要做个什么样的网络爬虫好呢?我记得以前好像博客园里面有人写过一个提取博客园用户名的博客。我这次就实现这个好了。   第一步我们要分析博客园一个URL的组成,我们每一个用户对应都有这样的一个主目录http://www.cnblogs.com/XXXXXXX 这样的一个主页(现在有了http://XXXXXXX.cnblogs.com这样的主页了,但是不常用)。所以我们判断一个字符串是不是博客园的有效用户,我们的做法就是提取一个像上面一样的URL,然后截取后面的用户名即可。   带正则表达式的网页下载程序 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <sys/types.h> 5 #include <sys/socket.h> 6 #include <unistd.h> 7 #include <netdb.h> 8 #include <netinet/in.h> 9 #include <arpa/inet.h> 10 #include <regex.h>//正则表达式 11 12 #define BUF_SIZE 512 13 14

在应用层模拟实用停等协议

一笑奈何 提交于 2019-11-27 19:10:22
本文允许转载,转载请保留全文! 【请先阅读】【说明&总目录】 http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 背景说明 本文章来源于近期需要提交的《计算机网络》课程实验。 教材使用高等教育出版社出版的陈鸣编著的《计算机网络:原理与实践》一书。 实验分为3部分,分别需要在应用层模拟实用停等协议、连续ARQ协议和滑动窗口协议,实现文件的传输。端与端之间的通信使用Socket完成。 语言可以任选,出于简单,本文以java为例,仅介绍使用停等协议的实现,其他内容由同学们自己探索吧。强烈不推荐MFC,除非想把自己玩死。 注:本人对网络兴趣不大,上课睡觉时间远远长于听课时间,故不对文章的正确性做任何保证,代码仅供参考。 2. 模拟实用停等协议的详细思路 本程序仅仅是一个课堂实验而已,故没有在程序结构上花太多心思,基本上算是想到哪儿写到哪儿,所以代码可能有一些奇♂怪的地方。 为了能在单机状态下进行端到端的通信,每个进程即作为Client,又作为Server。在演示时,同时打开两个进程,为两个进程的Server设置不同的端口号,分别由对方进程的Client进行连接,并将IP地址使用127.0.0.1,即可实现单机状态下进程之间的通信。 程序划分为6个类: Main:主要用于显示用户界面,完成与用户的交互;同时定义了程序中的全局常量。 Client

python day51

倖福魔咒の 提交于 2019-11-27 17:18:58
今日内容 Web框架的本质 我们可以这样理解: 所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端 。 这样我们就可以自己实现Web框架了。 简易版本的自定义web框架代码: 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() 总结: 用户的浏览器一输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定?所以,有一个统一的规则,让大家发送消息、接收消息的时候有个格式依据,不能随便写。这个规则就是HTTP协议,以后浏览器发送请求信息也好,服务器回复响应信息也罢,都要按照这个规则来。 HTTP协议 超文本传输协议:规定了客户端与服务端消息传输的格式 四大特性: 1.基于TCP/IP协议作用于应用层的协议 2.基于请求响应 3.无状态 4.无连接 数据格式之请求: 请求首行 请求头(一堆k,v键值对) /r/n 请求体(post请求携带的数据) 数据格式之响应: 响应首行 响应头(一堆k,v键值对) /r/n 响应体(post请求携带的数据)

缓冲区溢出攻击

耗尽温柔 提交于 2019-11-27 16:38:29
缓冲区溢出是目前最常见的一种安全问题,操作系统以及应用程序大都存在缓冲区溢出漏洞。缓冲区是一段连续内存空间,具有固定的长度。缓冲区溢出是由编程错误引起的,当程序向缓冲区内写入的数据超过了缓冲区的容量,就发生了缓冲区溢出,缓冲区之外的内存单元被程序“非法”修改。 一般情况下,缓冲区溢出导致应用程序的错误或者运行中止,但是,攻击者利用程序中的漏洞,精心设计出一段入侵程序代码,覆盖缓冲区之外的内存单元,这些程序代码就可以被CPU所执行,从而获取系统的控制权。 8.1 缓冲区溢出攻击原理 1. 局部变量与堆栈的关系 在一个程序中,会声明各种变量。静态全局变量是位于数据段并且在程序开始运行的时候被初始化,而局部变量则在堆栈中分配,只在该函数内部有效。 如果局部变量使用不当,会造成缓冲区溢出漏洞。例如,以下程序将命令行的第1个参数拷贝到buf局部变量中。 int main(int argc, char **argv) { char buf[80]; strcpy(buf, argv[1]); } 在一次函数调用中,堆栈中将被依次压入:参数、返回地址。如果函数有局部变量,接下来,就在堆栈中开辟相应的空间(SUB ESP,x)以构造变量。函数执行结束时,恢复堆栈到函数调用的地址,弹出返回地址到EIP以继续执行程序。 例如,调用函数main(int argc, char **argv)时

【Django】Web框架本质 -- 2019-08-17 05:50:23

↘锁芯ラ 提交于 2019-11-27 14:36:34
目录 根据不同的路径返回不同的内容 普通版 函数版 函数进阶版 返回具体的HTML文件 让网页动态起来 服务器和应用程序 wsgiref 模块 原文: http://blog.gqylpy.com/gqy/258 "@ * 我们可以这样理解:所有的==Web应用本质上就是一个socket服务端==,而用户的==浏览器就是一个socket客服端==。** 这样我们就可以自己实现Web框架了: from socket import * sk = socket(AF_INET, SOCK_STREAM) sk.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sk.bind(('127.0.0.1', 8080)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(9000) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 响应状态行 conn.send(b'Hello,world!') conn.close() 可以说Web服务本质上都是在这十几行代码基础上扩展出来的,这段代码就是它们的祖宗。 用户的浏览器一输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定

【Django】Web框架本质 -- 2019-08-17 05:43:11

限于喜欢 提交于 2019-11-27 14:36:01
目录 根据不同的路径返回不同的内容 普通版 函数版 函数进阶版 返回具体的HTML文件 让网页动态起来 服务器和应用程序 wsgiref 模块 原文: http://blog.gqylpy.com/gqy/258 "@ * 我们可以这样理解:所有的==Web应用本质上就是一个socket服务端==,而用户的==浏览器就是一个socket客服端==。** 这样我们就可以自己实现Web框架了: from socket import * sk = socket(AF_INET, SOCK_STREAM) sk.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sk.bind(('127.0.0.1', 8080)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(9000) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 响应状态行 conn.send(b'Hello,world!') conn.close() 可以说Web服务本质上都是在这十几行代码基础上扩展出来的,这段代码就是它们的祖宗。 用户的浏览器一输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定

项目二. 网络安全传输系统

不羁岁月 提交于 2019-11-27 13:37:16
项目二. 网络安全传输系统 sprint0-产品规划与设计 第1课-产品功能展示与模型设计 1. 功能 在底层开发上,先进行驱动开发,再往后发展就是对应的系统开发。要成为系统开发的工程师不了解应用编程的话也是行不通的。 本项目的服务器运行在pc的虚拟机上,客户端则安排在开发板上。我们在虚拟机上可以运行客户端,接下来我们在开发板上进行登录。可以选择的选项有: update Files Download Files Exit 也就是客户端可以将文件进行上传和下载服务器上的内容。 2. 模型 服务器: 在账号管理子系统中我们可以使用直接的编程来完成,但是我们是无法处理更加深入的问题的。所以我们选择了嵌入式数据库的处理方法。 对于传输子系统,我们为了安全的特性,我们进行相应的加密传输机制--OpenSSl机制。在服务器上的设计上,我们选择并发,为了更好的优化,选择线程池技术。 客户端: 只有一个传输子系统--OpenSSl机制。 sprint1-传输子系统设计 第2课-系统程序框架搭建 为了完成我们的目的,我们采用化整为零的思想。即先搭建不带安全传输系统的程序,再把安全传输的知识应进去。 我们先编写下面两个程序: client.c #include <stdio.h> #include <sys/types.h> #include <netinet/in.h> #include <sys