您的位置:首页 > 房产 > 建筑 > 官方入口_东莞每日感染者25至25万_全网引流推广_百度seo找哪里

官方入口_东莞每日感染者25至25万_全网引流推广_百度seo找哪里

2025/7/18 17:18:26 来源:https://blog.csdn.net/weixin_73059729/article/details/147024211  浏览:    关键词:官方入口_东莞每日感染者25至25万_全网引流推广_百度seo找哪里
官方入口_东莞每日感染者25至25万_全网引流推广_百度seo找哪里

Python 网络编程

文章目录

  • Python 网络编程
    • 一、IP地址处理
      • 1.1、安装IPy组件
      • 1.2、IPy模块的使用
        • 1.2.1、version()
        • 1.2.2、通过指定的网段输出该网络的IP个数及所有ip地址清单
        • 1.2.3、IP类常用的方法
        • 1.2.4、网络地址转换
        • 1.2.5、strNormal方法的使用
      • 1.3、多网格计算方法
      • 1.4、给定一个子网
        • 1.4.1、计算子网地址
        • 1.4.2、计算子网掩码
        • 1.4.3、计算广播地址
        • 1.4.4、显示地址范围
        • 1.4.5、可用IP数量
        • 1.4.6、列出所有IP地址
    • 二、使用 Paramiko 实现 SSH 远程操作
      • 2.1、什么是Paramiko
      • 2.2、Paramiko基本用法
      • 2.3、使用Paramiko实现SSH远程操作
    • 三、利用Python实现邮件发送
      • 3.1、发送邮件的基本步骤
      • 3.2、准备数据
      • 3.3、发送邮件
      • 3.4、发送邮件代码

一、IP地址处理

  • IPy是一个Python模块,用于处理IPv4和IPv6地址。它支持多种格式的IP地址表示方法,包括CIDR(Classless Inter-Domain Routing)格式,即IP地址和子网掩码的组合,以及IPv6地址的压缩格式。在网络编程中,IPy模块可以帮助我们更方便地进行IP地址的处理和计算。本节将从多个角度介绍IPy模块的使用方法。

1.1、安装IPy组件

  • 可以使用在线安装的方法,命令行中执行:
[root@localhost ~]# pip3 install IPy

1.2、IPy模块的使用

1.2.1、version()
  • 使用version()区分IP地址属于什么版本(注意大小写)
  • IPy模块包含IP类,使用它可以方便的处理绝大部分格式为IPv6以及IPv4的网络和地址,比如通过version方法可以区分出是IPv6的地址还是IPv4的地址。代码如下:
>>> from IPy import IP
>>> IP('10.0.0.1').version()
4
1.2.2、通过指定的网段输出该网络的IP个数及所有ip地址清单
from IPy import IP
ip = IP('192.168.0.0/28')
print(ip)
for x in ip:print(x)
1.2.3、IP类常用的方法
>>> from IPy import IP
>>> ip=IP('192.168.1.20')
# 反向地址解释
>>> ip.reverseNames()
['20.1.168.192.in-addr.arpa.']
# 解析IP地址类型,是私有地址还是公有地址
>>> ip.iptype()
'PRIVATE'
>>> IP('8.8.8.8').iptype()
'PUBLIC'
# 将IP地址转换成整形地址格式
>>> IP('8.8.8.8').int()
134744072
# 将IP地址转换成十六进制的格式
>>> IP('8.8.8.8').strHex()
'0x8080808'
# 将IP地址转换为二进制的格式
>>> IP('8.8.8.8').strBin()
'00001000000010000000100000001000'
# 将十六进制的地址格式转换成点分十进制的地址格式
>>> print(IP(0x8080808))
8.8.8.8
1.2.4、网络地址转换
  • 根据IP地址与掩码生成网络格式
>>> print(IP('192.168.1.0').make_net('255.255.255.0'))
192.168.1.0/24
1.2.5、strNormal方法的使用
  • 通过strNormal方法指定不同wantprefixlen参数值,以定制不同输出类型的网段,输出类型为字符串。
# 输出网络地址
>>> IP('192.168.1.0/24').strNormal(0)
'192.168.1.0'
# 输出带有掩码长度的网络地址
>>> IP('192.168.1.0/24').strNormal(1)
'192.168.1.0/24'
# 输出带有子网掩码的网络
>>> IP('192.168.1.0/24').strNormal(2)
'192.168.1.0/255.255.255.0'
# 输出ip地址范围
>>> IP('192.168.1.0/24').strNormal(3)
'192.168.1.0-192.168.1.255'

1.3、多网格计算方法

  • 有时候需要比较两个网段是否存在包含、重叠等关系,比如相同网段但是掩码前缀长度不一样会被认为是不同网段,如10.0.0.0/16和10.0.0.0/24,另外即使具有相同的掩码前缀但是处于不同的网络地址,同牙膏也被视为不同网络,如10.0.0.0/16和192.168.0.0/16被视为不同网段。IPy支持类似于数值型数据的比较,这样可以帮助IP对象进行比较。

  • 判断IP地址和网段是否包含与另一个网段

>>> from IPy import IP
>>> '192.168.1.100' in IP('192.168.1.0/24')
True
  • 判断两个网段是否存在重叠
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
1
# 注释: 0表示不重叠,1表示有重叠
  • 根据输入的IP或子网返回网络、掩码、广播、反向解析、子网数、ip类型等信息
>>> from IPy import IP
>>> ips=IP('192.168.10.0/24')
>>> print('net: %s' % ips.net())
net: 192.168.10.0  # 子网地址
>>> print('netmask: %s' % ips.netmask())
netmask: 255.255.255.0  # 子网掩码
>>> print('broadcast: %s' % ips.broadcast())
netmask: 192.168.10.255  # 广播地址
>>> print('subnet': %s' % len(ips))
netmask: 256  # 地址数量>>> ips=IP('192.168.10.101')
>>> print('reverse address: %s' % ips.reverseNames()[0])  # 反向语句的名字
reverse address: 101.10.168.192.in-addr.arpa.
>>> print('hexadecimal: %s' % ips.strHex())  # 
hexadecimal: 0xc0a80a65  # 转换为16进制
>>> print('binary ip: %s' % ips.strBin())
binary ip: 11000000101010000000101001100101  # 转换为二进制
>>> print('iptype ip: %s' % ips.iptype())
iptype ip: PRIVATE  # 地址类型(公有私有)          

1.4、给定一个子网

  • 10.0.0.16/29,计算子网地址、子网掩码、广播地址、可用IP数量。
1.4.1、计算子网地址
>>> IP('10.0.0.16/29').net()
IP('10.0.0.16')
1.4.2、计算子网掩码
>>> IP('10.0.0.16/29').netmask()
IP('255.255.255.248')
1.4.3、计算广播地址
>>> IP('10.0.0.16/29').broadcast()
IP('10.0.0.23')
1.4.4、显示地址范围
>>> IP('10.0.0.16/29').strNormal(3)
'10.0.0.16-10.0.0.23'
1.4.5、可用IP数量
>>> len(IP('10.0.0.16/29'))
8
1.4.6、列出所有IP地址
>>> for x in IP('10.0.0.16/29'):
...   print(x) 
... 
10.0.0.16
10.0.0.17
10.0.0.18
10.0.0.19
10.0.0.20
10.0.0.21
10.0.0.22
10.0.0.23

二、使用 Paramiko 实现 SSH 远程操作

  • 随着云计算和物联网的发展,远程操作服务器变得越来越重要。在Python中,我们可以使用Paramiko模块来轻松实现SSH远程操作。在本文中,我们将介绍Paramiko的基本用法,以及如何在Python中使用Paramiko来远程管理服务器。

2.1、什么是Paramiko

  • Paramiko是一个用于SSHv1和SSHv2的Python模块,可以用于连接和控制SSH客户端和SSH服务器。使用Paramiko模块,可以轻松地编写Python脚本来远程登录并操作服务器。
  • 使用pip命令安装Paramiko模块,命令如下
[root@localhost ~]# pip3 install paramiko

2.2、Paramiko基本用法

  • Paramiko模块的基本用法非常简单,我们可以使用Paramiko的SSHClient类来创建一个SSH客户端对象,并连接到SSH服务器。下面是一个基本的例子:
>>> import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect('192.168.93.102',username='root',password='wzh.2005')
  • 在这个例子中,我们首先创建了一个SSHClient对象,并使用set_missing_host_key_policy方法来允许自动添加缺失的SSH密钥。然后,我们使用connect方法连接到SSH服务器,传入主机名、用户名和密码作为参数。
  • 现在,我们已经成功地连接到SSH服务器。接下来,我们可以使用SSHClient对象来执行命令,
  • 例如获取服务器的操作系统信息:
>>> stdin,stout,stderr = ssh.exec_command('uname -a')
>>> print(stout.read())
b'Linux localhost.localdomain 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux\n'
  • 这个例子中,我们使用exec_command方法来执行uname -a命令并获取输出。我们还使用了stdout.read()来读取输出并打印出来。
  • 除了执行远程命令外,我们还可以使用SSHClient对象来上传和下载文件。下面是一个上传文件的例子:
>>> sftp = ssh.open_sftp()
>>> local_file = '/etc/passwd'
>>> remote_file = '/opt/passwd'
>>> sftp.put(local_file,remote_file)
<SFTPAttributes: [ size=886 uid=0 gid=0 mode=0o100644 atime=1739603745 mtime=1739603745 ]>
# 远程主机查看
[root@localhost ~]# ls /opt/
passwd
  • 这个例子中,我们首先使用open_sftp方法打开SFTP会话,并使用put方法来上传本地文件到远程服务器。我们还使用了sftp.close()方法来关闭SFTP会话。

2.3、使用Paramiko实现SSH远程操作

  • 现在,我们已经了解了Paramiko的基本用法,接下来,我们将使用Paramiko来远程操作服务器。我们将实现以下功能:
    • 连接到SSH服务器并执行一些基本命令
    • 创建和删除文件夹
    • 上传和下载文件
# 首先, 我们先导入必要的模块:
import os
import paramiko# 定义一些常量, 包括 SSH 服务器的主机名、用户名和密码
HOST = '192.168.93.102'
USER = 'root'
PASSWORD = 'wzh.2005'# 使用 paramiko.SSHClient 类来连接到SSH服务器
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST, username=USER, password=PASSWORD)
# 在这个例子中, 我们使用了 set_missing_host_key_policy() 方法来自动添加缺失的 SSH 密钥。# 接下来, 我们将定义一些函数来执行不同的任务。 首先是执行命令的函数
def run_command(command):stdin, stdout, stderr = ssh.exec_command(command)output = stdout.read().decode('utf-8')return output
# 这个函数接收一个命令参数, 使用 SSHClient 对象的 exec_command 方法来执行此命令, 并将输出作为字符串返回。def create_directory(path):sftp = ssh.open_sftp()try:sftp.mkdir(path)except IOError:passsftp.close()
# 这个函数接收一个路径参数, 并使用 SFTP 会话创建一个目录# 定义了功能来上传和下载文件
def upload_file(local_path, remote_path):sftp = ssh.open_sftp()sftp.put(local_path, remote_path)sftp.close()
# 这些函数分别接收一个本地路径和远程路径 (用于上传) 或一个远程路径和本地路径 (用于下载), 并使用 SFTP 会话来上产或下载响应的文件。def download_file(remote_path, local_path):sftp = ssh.open_sftp()sftp.get(remote_path, local_path)sftp.close()# 定义一个 main 函数来执行所有任务
def main():# 运行一个命令output = run_command('ls -la')print(output)# 创建一个目录create_directory('/opt/mydir')# 上传文件upload_file('/etc/fstab', '/opt/fstab_bak')# 下载文件download_file('/opt/fstab_bak', '/root/fstab_bak')ssh.close()
main()
  • 这个main函数执行了以下任务:
    • 执行 ls -la 命令并打印输出
    • 创建了一个新目录
    • 上传了一个文件
    • 下载了同一个文件
    • 关闭了 SSH 连接
  • 最后来执行此程序:
[root@localhost ~]# python3 myssh.py 
总用量 19640
dr-xr-x---.  6 root root      264 24 20:41 .
dr-xr-xr-x. 17 root root      244 36 2024 ..
-rw-------.  1 root root     1417 37 2024 anaconda-ks.cfg
-rw-------.  1 root root     1783 24 20:42 .bash_history
-rw-r--r--.  1 root root       18 1229 2013 .bash_logout
-rw-r--r--.  1 root root      176 1229 2013 .bash_profile
-rw-r--r--.  1 root root      176 1229 2013 .bashrc
drwxr-xr-x   3 root root       17 24 20:41 .cache
drwxr-xr-x   3 root root       17 24 20:39 .config
-rw-r--r--.  1 root root      100 1229 2013 .cshrc
drwxr-----   3 root root       19 59 2024 .pki
drwxr-xr-x  17 wzh  wzh      4096 24 20:32 Python-3.11.6
-rw-r--r--   1 root root 20067204 24 20:12 Python-3.11.6.tar.xz
-rw-------   1 root root       64 24 20:37 .python_history
-rw-r--r--.  1 root root      129 1229 2013 .tcshrc
-rw-------   1 root root      696 24 20:41 .viminfo
  • 此时前往远程主机192.168.93.102,应该会在/opt目录下看到上传过去的文件“fstab_bak”,还可以看到在/opt目录下我们创建了一个“mydir”目录,并且本地root用户的家目录下,也会看到下载下来的此文件。
  • 使用Paramiko模块可以轻松实现SSH远程操作。在本文中,我们介绍了Paramiko的基本用法,并演示了如何在Python中使用Paramiko来远程管理服务器。无论是在云计算还是物联网领域,Paramiko都是一个非常有用的工具,可以帮助我们实现服务器管理的自动化。

三、利用Python实现邮件发送

  • SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中专方式。Python的smtplib提供了一种很方便的途径发送电子邮件。它smtp协议进行了简单的封装。

3.1、发送邮件的基本步骤

  • 代码发送邮件的步骤,和人工发送邮件步骤基本一致:登录邮件》准备邮件内容》发送邮件。
# 代码逻辑如下:
import smtplib(1)连接邮箱服务器
连接对象 = smtplib.SMTP_SSL(服务器地址, 邮箱服务端口)
- 服务器地址: smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱) - 邮箱服务端口: 46525
(2)登录邮箱 连接对象.login(邮箱账号, 授权码)

3.2、准备数据

  • 数据指的需要发送的内容。邮件内容的构建需要涉及到另外一个库email,它可以用来构建邮件主题以及各种形式的邮件内容(包括文字内容、图片呢日哦那个、html内容、附件)等,这里先简单说一下邮件主题和文本内容,其他形式的内容在后面邮件内容部分详细讲解。

  • 代码逻辑如下:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header(1)创建邮件对象
邮件对象 = MIMEMultipart()
(2)设置邮件主题
主题对象 = Header(邮件标题, 编码方式).encode()
邮件对象['Subject'] = 主题对象
(3)设置邮件发送者
邮件对象['From'] = '用户名 <用户名>'
(4)设置邮件接收者
邮件对象['To'] = '收件人1; 收件人2; 收件人3...'
(5)添加文字内容
文件内容对象 = MIMEText(内容, 类型, 编码方式)
- 内容: 就是文字字符串
- 类型: plain(简单的文字内容)、html(超文本) 邮件对象.attach(文字对象)

3.3、发送邮件

  • 代码逻辑如下:
连接对象.sendmail(发件人,收件人, 邮件对象.as_string())
连接对象.quit()

3.4、发送邮件代码

  • 发送邮件的具体代码如下所示:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Headercon = smtplib.SMTP_SSL('smtp.qq.com', 465)con.login('2516786946', '你的qq邮箱授权码')msg = MIMEMultipart()subject = Header('Python 邮件测试标题', 'utf-8').encode()
msg['Subject'] = subjectmsg['From'] = '2516786946@qq.com <2516786946@qq.com>'msg['To'] = '2516786946@qq.com'text = MIMEText('Python 邮件测试正文', 'plain', 'utf-8')
msg.attach(text)con.sendmail('2516786946@qq.com', '2516786946@qq.com', msg.as_string())
con.quit()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com