Python socket库 基础概念

socket库是Python中用于网络编程的标准库之一,它提供了创建套接字(socket)对象、绑定地址和端口、监听连接、接受连接、发送和接收数据等功能。

套接字是网络通信的基础,它允许程序之间进行数据传输和通信。

套接字类型:

SOCK_STREAM:流套接字,提供面向连接的、可靠的数据传输服务,通常用于TCP协议。

SOCK_DGRAM:数据报套接字,提供无连接的、不可靠的数据传输服务,通常用于UDP协议。

SOCK_RAW:原始套接字,允许直接访问底层协议,通常用于网络测试和自定义协议。

地址族:

AF_INET:IPv4地址族。

AF_INET6:IPv6地址族。

AF_UNIX:Unix域套接字,用于同一台机器上的进程间通信。

套接字方法:

socket():创建一个新的套接字对象。

bind():将套接字绑定到指定的地址和端口。

listen():开始监听传入的连接请求(仅对SOCK_STREAM类型的套接字有效)。

accept():接受一个连接请求,并返回一个新的套接字对象和客户端地址(仅对SOCK_STREAM类型的套接字有效)。

connect():尝试连接到指定的地址和端口。

send() /send() 和 recv():用于发送和接收数据。

close():关闭套接字。

下面是一个简单的服务器和客户端的示例代码,服务器在端口10000上监听连接,客户端尝试连接到这个地址和端口。一旦连接建立,客户端发送一个消息给服务器,服务器收到消息后将其发送回客户端,然后连接关闭。

# ==> TCP服务器import socket# 创建一个TCP/IP套接字server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定到地址和端口bind()server_address = ('localhost', 10000)server_socket.bind(server_address)# 开始监听连接listen()server_socket.listen(1)while True:# 等待连接accept()print('Waiting for a connection...')connection, client_address = server_socket.accept()try:print('Connection from', client_address)# 接收数据recv()data = connection.recv(1024)print('Received {!r}'.format(data))# {!r} 是一个格式说明符,它表示将对象以“repr” (representation) 的形式展示# 返回一个对象的“官方”字符串表示,通常可以用来在Python解释器中重新创建该对象# 在字符串格式化中,{!r} 告诉 format 方法(或 str.format() 方法)使用 repr 函数将值转换成字符串if data:# 发送数据回客户端sendall()sent = connection.sendall(data)print('Sent {!r}'.format(sent))else:print('No data received')finally:# 关闭连接close()connection.close()# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# ==>TCP客户端import socket# 创建一个TCP/IP套接字client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器connect()server_address = ('localhost', 10000)client_socket.connect(server_address)try:# 发送数据sendall()message = 'This is the message.'print('Sending {!r}'.format(message))client_socket.sendall(message.encode())# 接收数据recv()data = client_socket.recv(1024)print('Received {!r}'.format(data.decode()))finally:# 关闭连接close()client_socket.close()

==> 小彩蛋

Scapy和Socket配合使用:

Scapy和Socket是Python中常用的两个网络编程库:Scapy是一个功能强大的交互式数据包操作程序,可以用来发送、嗅探、解析和修改网络数据包;而Socket则是一个基础的网络通信接口,提供了创建客户端和服务器、发送和接收数据等功能。

要将Scapy和Socket搭配使用,通常的做法是使用Socket来建立网络连接或监听端口,然后使用Scapy来发送或接收数据包。下面的示例首先使用Socket创建一个TCP连接,尝试连接到目标主机的指定端口。然后,使用Scapy的SR函数发送一个TCP SYN数据包,并等待响应。根据响应结果,我们可以判断目标主机是否在监听该端口:

from scapy.all import *import socket# 使用Socket创建一个TCP连接target_ip = "192.168.1.1"target_port = 80client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect((target_ip, target_port))# 使用Scapy发送一个TCP SYN数据包
# IP(dst=target_ip): 创建一个IP层的数据包,其中dst=target_ip表示目标IP地址
# TCP(dport=target_port, flags="S"): 在IP层之上创建一个TCP层的数据包。dport=target_port指定了目标端口,而flags="S"表示这是一个SYN标志设置的数据包,通常用于TCP三次握手的第一步。
# 使用SR函数发送数据包并接收响应
# 如果目标主机在监听该端口,会返回一个SYN+ACK数据包;否则,可能会返回一个RST数据包response = SR(IP(dst=target_ip)/TCP(dport=target_port, flags="S"), timeout=1) # 检查响应结果if response:# 如果收到SYN+ACK数据包,表示目标主机在监听该端口if response[0].haslayer(TCP) and response[0][TCP].flags == 0x12:print(f"Port {target_port} is open")else:print(f"Port {target_port} is closed")else:print(f"No response from target host")# 关闭Socket连接client_socket.close()

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

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

相关文章

【碎片知识点】安装Linux系统 VMware与kali

天命:VMware就是可以运行操作系统的载体,kali就是Linux的其中一个分支 天命:Linux有两个分支版本:centos与ubuntu,kali底层就是ubuntu(所有Linux用起来都差不多,没啥区别) 天命&…

CSS之选择器、优先级、继承

1.CSS选择器 常用的选择器 <body><div class"parent"><div id"one" style"background: blue" class"child">1<div class"one_one">11</div><div style"background-color: blueviole…

一个页面需要加载大量的图片,如何提升用户体验?

当网站页面需要加载大量图片时&#xff0c;优化用户体验非常关键&#xff0c;以下是一些方法来提升用户体验&#xff1a; 图片懒加载&#xff08;Lazy Loading&#xff09;&#xff1a;只加载用户可以看到的图片&#xff0c;当用户向下滚动页面时&#xff0c;再加载其他图片。这…

假期2.14

1、选择题 1.1、若有下面的变量定义&#xff0c;以下语句中合法的是&#xff08; A &#xff09;。 int i&#xff0c;a[10]&#xff0c;*p&#xff1b; A&#xff09; pa2; B&#xff09; pa[5]; C&#xff09; pa[2]2; D&#xff09; p&(i2); 1.2、…

2024LeetCode分类刷题

一、数组 88. 合并两个有序数组 public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 0, p2 0;int[] sorted new int[m n];while (p1 < m || p2 < n) {int current;if (p1 m) {current nums2[p2];} else if (p2 n) {current nums1[p1];} else i…

每日一题——数字翻转

题目; 这道题看似是很简单的回文数 实则就是很简单的回文数 但是需要注意的一点是负数 可以在开头就进行判断&#xff0c;如果N<0的话就令N-N&#xff0c;将所有数都转成正数就好办了 上代码&#xff1a; #include <iostream> #include<string> #include<…

Linux 目录结构结构

Linux 目录结构结构 概念 Linux 没有 C、D、E...盘符&#xff0c;只有一个目录树。通过挂载&#xff0c;将不同的磁盘挂载到目录树下&#xff0c;通过目录访问磁盘。 ‍ 不同目录的作用 目录存放内容/作用​/​根目录&#xff0c;目录树的起点&#xff0c;存放所有文件。​…

4核16G服务器价格腾讯云PK阿里云

4核16G服务器租用优惠价格26元1个月&#xff0c;腾讯云轻量4核16G12M服务器32元1个月、96元3个月、156元6个月、312元一年&#xff0c;阿腾云atengyun.com分享4核16服务器租用费用价格表&#xff0c;阿里云和腾讯云详细配置报价和性能参数表&#xff1a; 腾讯云4核16G服务器价…

【前端工程化面试题】简单说一下 vite 的原理

Vite 是一种新一代的前端构建工具&#xff0c;它的原理主要基于两个核心概念&#xff1a;ES 模块和服务器端模块打包&#xff08;Server-Side Module Bundling&#xff0c;简称 SSMB&#xff09;。 ES 模块&#xff08;ES Modules&#xff09;&#xff1a;Vite 利用了现代浏览器…

蓝桥杯基础知识8 list

蓝桥杯基础知识8 list 01 list 的定义和结构 lits使用频率较低&#xff0c;是一种双向链表容器&#xff0c;是标准模板库&#xff08;STL&#xff09;提供的一种序列容器&#xff0c;lsit容器以节点&#xff08;node&#xff09;的形式存储元素&#xff0c;使用指针将这些节点链…

如何优化覆盖索引

覆盖索引&#xff08;Covering Index&#xff09;是指一个索引包含了查询中所需的所有字段的索引。这意味着查询可以仅通过索引来获取数据&#xff0c;而无需访问数据表中的行。当数据库执行查询时&#xff0c;如果可以直接在索引中找到需要的所有信息&#xff0c;那么就能显著…

计算机网络概述习题拾遗

学习目标&#xff1a; 自下而上第一个提供端到端服务的层次 路由器、交换机、集线器实现的功能层 TCP/IP体系结构的网络接口层对应OSI体系结构的哪两个层次 分组数量对总时延的影响 如果这篇文章对您有帮助&#xff0c;麻烦点赞关注支持一下动力猿吧&#xff01; 学习内容…

4核16g云服务器多少钱?

4核16G服务器租用优惠价格26元1个月&#xff0c;腾讯云轻量4核16G12M服务器32元1个月、96元3个月、156元6个月、312元一年&#xff0c;阿腾云atengyun.com分享4核16服务器租用费用价格表&#xff0c;阿里云和腾讯云详细配置报价和性能参数表&#xff1a; 腾讯云4核16G服务器价…

倒计时55天

(0条未读通知) 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) a. #include<bits/stdc.h> using namespace std; #define int long long const int N2e56; const int inf0x3f3f3f3f; void solve() {int n,cn10,cn20;string s,str1"…

MyBatisPlus - 润物无声、效率至上、丰富功能

目录 一、简介 1.1、为什么要使用 MybatisPlus 二、使用指南 2.1、依赖 2.2、配置 2.3、常用注解 2.4、BaseMapper 的使用 2.4.1、定义 Mapper 接口 2.4.2、基于 QueryWrapper 的查询&#xff08;不推荐&#xff09; 2.4.3、基于 UpdateWrapper 的修改&#xff08;不…

Sentinel 流控-链路模式

链路模式 A B C 三个服务 A 调用 C B 调用 C C 设置流控 ->链路模式 -> 入口资源是 A A、B 服务 package com.learning.springcloud.order.controller;import com.learning.springcloud.order.service.BaseService; import org.springframework.beans.factory.annotatio…

腾讯云4核8G服务器3年600元?

腾讯云4核8G服务器3年600元&#xff1f;目前的价格是轻量应用服务器4核8G12M带宽一年446元、646元15个月&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;标准型SA2服务器1444.8元一年&#xff0c;在txy.wiki可以查询详细…

Excel一键导入导出-EasyPOI

EasyPOI是一款优秀的开源Java库&#xff0c;专为简化和优化Excel文件的导入导出操作而设计。下面&#xff0c;我会介绍EasyPOI在项目中使用EasyPOI&#xff0c;实现Excel文件的高效操作。帮助读者全面了解和掌握这一工具。 EasyPOI简介 官网&#xff1a; http://www.wupaas.co…

串口通信知识点

串口的话主要就是用来进行通信的。 1>串行通信&#xff0c;并行通信。 串行通信&#xff1a;只使用一根线来进行数据发送或者是接收&#xff0c;串行通信传输数据是一位一位进行传输 并行通信&#xff1a;使用多跟线进行数据的发送和接收&#xff0c;并行通信可以一次传输…

windows服务启动

一.NetCore 1.创建启动脚本run_instal.bat,例如程序文件为ApiDoc.exe set serviceName"Apidoc Web 01" set serviceFilePath%~dp0ApiDoc.exe set serviceDescription"ApiDoc 动态接口服务 web 01"sc create %serviceName% BinPath%serviceFilePath% sc c…