黑帽子Python——基础的网络编程工具——TCP的客户端和服务端

学习自Python黑帽子(第二版)


TCP的客户端和服务端

  • 前言
  • TCP客户端
  • TCP服务端
  • 问题
  • 后记


前言

直接通过实践学习编程,很容易产生一些细节方面的知识错误,遇到不会的俺就问ChatGPT😏

TCP客户端

#快速创建一个TCP客户端对于潜伏在内网环境中没有工具和编译器的时候是一项极其有用的能力import socket
#导入socket模块,它提供了对套接字编程的支持,可以在计算机网络上通信。
#导入后可以实现创建套接字、绑定地址、监听连接请求、发送和接收数据等。target_host = "127.0.0.1"
target_port = 9998client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#socket.AF_INET 是套接字地址簇,表示使用 IPv4 地址族,其中 AF 是 Address Family 的缩写。
#socket.SOCK_STREAM 是套接字类型,表示使用面向连接的 TCP 套接字,其中 SOCK 是 Socket Type 的缩写。
#将这两个参数传递给 socket.socket 函数,将返回一个套接字对象,即 client。
#因此,这条语句的含义是使用 TCP/IP 协议创建一个客户端套接字,以便进行网络通信。client.connect((target_host,target_port))
#connect 是套接字对象的一个方法,用于连接到远程主机。
#如果连接成功,该方法将返回 None。否则,它将引发一个异常,通常是 socket.error 或其子类,指示连接失败的原因。client.send(b"abcd")
# client.send 方法发送一个 HTTP GET 请求(bytes类型)
#   GET / HTTP/1.1\r\n:表示使用 HTTP/1.1 协议发送一个 GET 请求,并请求根路径 /。
#   Host:baidu.com\r\n:表示请求的主机是 baidu.com。
#   \r\n:表示请求头部结束,之后是请求的实体内容。
#字符串前面加上了字母 b,表示将字符串转换为字节串,以便使用 send 方法发送。response = client.recv(4096)print(response.decode())
client.close()

TCP服务端

在这里测试了一下,用上文写的TCP客户端给这里的服务端发送了几个测试的数据包

服务端输出
在这里插入图片描述

客户端输出
在这里插入图片描述
成功

#编写一个TCP服务端可以被当作远程代码执行工具或者代理工具
import socket
import threadingIP = '0.0.0.0'
PORT = 9998def main():server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)server.bind((IP,PORT))#指定服务器应该监听哪个IP地址和端口server.listen(5)#开始监听print(f'[*] Listening on {IP}:{PORT}')while True:#进入主循环,并等待外来链接client,address = server.accept()#accept() 方法是 Python 中 socket 模块中的一个方法,用于阻塞程序执行,直到有客户端连接请求时才会返回。#返回一个元组包含新的套接字(socket)对象(client)和客户端的地址信息(address)。print(f'[*] Acctepted connection from {address[0]}:{address[1]}')#返回的address也是一个元组,address[0] 表示客户端的 IP 地址,address[1] 表示客户端的端口号#address[0] 和 address[1] 都是字符串类型client_handler = threading.Thread(target=handle_client, args=(client,))#使用 threading 模块来创建和管理线程。创建新的线程时,需要调用 threading.Thread() 构造函数,并指定目标函数和函数参数,即可创建一个新的线程对象。#其中,target 参数是要在新线程中运行的函数,args 参数是传递给目标函数的参数,它应该是一个元组或列表。client_handler.start()#启动新线程def handle_client(client_socket):with client_socket as sock:#with 语句创建一个套接字对象 sock,该套接字对象是 client_socket 参数的别名。#这样,在函数结束时,Python会自动关闭 sock 对象,无需手动调用 close 方法。request = sock.recv(1024)print(f'[*] Received:{request.decode("utf-8")}')#先使用 recv 方法接收客户端发送的数据,最多接收 1024 字节。#然后通过 decode 方法将字节串解码为字符串,并将其打印出来。sock.send(b'ACK')#接着使用 send 方法向客户端发送一个简单的确认消息 b'ACK',表示已经成功接收到客户端的请求。#这里需要注意的是,send 方法只能发送字节串,因此使用 b'ACK' 表示一个字节串。#当 with 语句块执行完毕后,会自动调用 client_socket.close() 方法来关闭套接字连接。这样可以确保在函数结束时正确关闭套接字,避免出现连接泄露等问题。if __name__ == '__main__':#使得导入模块后不会执行之前定义的变量和函数main()

问题

客户端代码中一开始我看服务端监听的是“0.0.0.0”,target_host 的赋值我也就写“0.0.0.0”,但是报错了

OSError: [WinError 10049]

看了看大佬的解答
原因:无法连接到0.0.0.0,因为它不是有效的IP地址。如果将服务器配置为在0.0.0.0上侦听(在每个可用的网络接口上侦听),则应该能够只使用127.0.0.1或localhost。


后记

2023/3/22 | 0:17

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

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

相关文章

PHP HTTP客户端-Guzzle原理解析

本文适合寻找PHP HTTP客户端库,或者对于Guzzle的使用和实现原理比较感兴趣的同学阅读,需要具备一定的PHP基础知识。 一、背景 在PHP后台开发过程中,经常会遇到模块间需要通过HTTP通信的情形。PHP语言本身只提供了socket操作的接口&#xff…

客户端日志和异常处理

目录 一. 使用Serilog结构化日志记录日志信息二. 捕获全局异常三. 使用AOP统一处理异常 一. 使用Serilog结构化日志记录日志信息 Serilog包的引用和使用语法都可以在网上找到(https://github.com/serilog/serilog/wiki/),不再赘述&#xff0…

深入浅出Transformer

作者:麦克船长 链接:https://www.zhihu.com/question/471328838/answer/2864224369 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 如果说「从浅入深」理解 Transformer,逐渐要到…

自然语言处理 Transformer 模型

一、Transformer 模型出现之前的NLP 语言模型 1、N 元文法语言模型 1.1、马尔科夫假设(Markov Assumption)与 N 元文法语言模型(N-gram Language Model) 下一个词出现的概率只依赖于它前面 n-1 个词,这种假设被称为马尔…

一文速览大语言模型在分子领域中的探索

随着 ChatGPT 的快速崛起,大型语言模型(LLM)已经在人类语言建模领域展示出了其非凡的能力。无论是证明数学公式、编写代码,还是以不同的风格创作诗歌,LLM 都能胜任。然而,尽管 LLM 在人类语言的掌握上已达到…

“AI+教育”:景联文科技高质量教育GPT题库助力教学创新

去年年底,OpenAI推出ChatGPT,掀起AI热潮,教育作为“AI”应用落地的关键场景,再次受到广泛关注。 “AI教育”的快速发展,是受到技术、需求和政策三重因素共同驱动的结果。 在技术方面,随着人工智能技术的不断…

对话系统文献综述

一、简介 论文:https://arxiv.org/pdf/1711.01731.pdf 该论文对对话系统进行了综述,并讨论了今后可能的研究方向。 目前的对话系统大致被分成两类: 1 任务导向的对话系统 任务为导向的对话系统是帮助用户去完成特定任务,比如找…

如何利用大数据分析技术预测员工离职?

为什么我们要对员工离职进行预测,因为它会帮助公司减少员工离职成本的消耗。 本文为美国肯尼索州立大学刘丽媛(Lilian)在HR成长部落2019年6月23日的线下活动分享文字实录,希望对大家在数据分析在HR领域的应用有所启发。 大家好&am…

Python员工离职数据分析

Python员工离职数据分析 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import warnings warnings.filterwarnings(ignore)# 数据全显示 pd.set_option(display.max_columns, None) # 颜色 colors sns.color_palette() # 数据精度 pd.set_opti…

从数据分析,看公司员工流失率分析报告

一、概述: 1、员工离职和员工流失率的概念: 员工离职:员工被辞退及辞职、不续签的情况 员工流失率(离职率):公司离职的员工人数/(入职人数最初原有人数)*100% 例如:月…

数据分析——员工离职预测

员工离职预测 一. 题目描述二. 数据说明三. 步骤实现1.导入并查看2.数据探索性分析3.数据处理4.模型分析5.结果分析(1) 可视化的结果分析(2)特征选择结果分析(3)多模型交叉验证结果分析 一. 题目描述 员工是否准备离职是困扰用人单位的问题,其关系到单位…

逾2500名选手竞跑乌鲁木齐冰雪马拉松

中新社乌鲁木齐1月13日电(记者 孙亭文) 2019乌鲁木齐丝绸之路冰雪马拉松(简称“冰马”)13日鸣枪开跑,逾2500名跑友在天山山麓的“冰天雪地”中竞跑。 1月13日,2019乌鲁木齐丝绸之路冰雪马拉松在乌鲁木齐市城南的天山脚下鸣枪开跑,逾2500名跑友…

html 跑步比赛小游戏,疯狂趣味跑步竞赛3D

疯狂趣味跑步竞赛3D是一款跑酷类型的休闲游戏,游戏在整体画面上搭配了最新的技术,使得游戏画面看起来非常华丽,人物的建模也很可爱。玩家在游戏中可以在各种风格的跑道上进行比赛,还可以在线跟别的玩家进行匹配。喜欢这款游戏的快…

oracle计算日期倒计时,时间倒算回去到了哪里?│机械倒数计时码表

Laura Lan蓝思晴 《大寫的蘿菈》主笔 华语圈知名钟表珠宝评论家,专精机械钟表赏析,亦对珠宝、生活、文化与艺术等各领域皆有着独到的见解。创办《引想力工作室》从事专业文案、顾问、讲习等工作。 所有不能实现的,制表大师们都曾经挖空心思研…

茂名天源石化等项目开工 石化业高质量发展看广东

目前来看,广东省已经拥有诸多国外化工巨头、大型民营炼化企业和不少国企的炼化项目,成为很多石化企业首选的项目落地基地。“石化业高质量发展看广东”,已经逐渐明朗。今年以来,已有恒力石化(惠州)PTA项目、东华能源(茂名)烷烃资源…

c++并行编程中的“锁”难题

linux服务器开发相关视频解析: 在并行程序中,锁的使用会主要会引发两类难题:一类是诸如死锁、活锁等引起的多线程Bug;另一类是由锁竞争引起的性能瓶颈。本文将介绍并行编程中因为锁引发的这两类难题及其解决方案。 1、用锁来防止…

恒力石化、茂名天源石化等项目开工 2025年广东石化产业营收力争超2万亿

目前来看,广东省已经拥有诸多国外化工巨头、大型民营炼化企业和不少国企的炼化项目,成为很多石化企业首选的项目落地基地。“石化业高质量发展看广东”,已经逐渐明朗。 今年3月31日,广东省发展改革委官网公布《广东省2021年重点建…

Linux中的线程

1.线程的基本概念 2.线程和进程的区别 线程安全 *线程的同步 线程的调度 线程的通信编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程_阳光日志-CSDN博客_多线程和多进程编程线程是什么?要理解这个概念,须要先了解一下操作系统的一些…

武汉超级计算机中心,加快打造“五个中心” 武汉率先开建人工智能计算中心...

(来源:武汉市发改委) 原标题:加快打造“五个中心” 武汉率先开建人工智能计算中心 从华为东莞松山湖基地运来的预制化模块箱体,正在光谷科学岛起步区被吊装,未来将被“拼装”成武汉重要的人工智能算力基础设施。3月1日&#xff0c…

产业丨国产数据库行业火热,厂商各有各的算盘

前言: 随着数字经济的不断发展,未来数据库发展有着四个趋势:开源、HTAP、云原生以及和大数据技术融合。 如今,随着众多企业入局,国产数据库正在打着一场激烈的翻身仗。 前言: 随着数字经济的不断发展&a…