Python网络编程

一、IP地址处理

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

1.安装 IPy 组件

可以使用在线安装的方法,命令行中执行:

 pip3 install IPy

2. IPy 模块的使用

(1)用 version()区分 IP 地址属于什么版本(注意大小写)

        IPy 模块包含 IP 类,使用它可以方便的处理绝大部分格式为 IPv6 以及 IPv4 的网络和地址,比如通过 version 方法可以区分出是 IPv6 的地址还是 IPv4 的地址。代码如下:

>>> from IPy import IP
>>> IP('10.0.0.1').version()
(2)通过指定的网段输出该网段的 IP 个数及所有 ip 地址清单 
>>> from IPy import IP
>>> ip=IP('192.168.0.0/28')
>>> print (ip.len())
>>> for x in ip:
...   print(x)
(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'
#将TP 地址转换成整形地址格式
>>> 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
(4)网络地址转换,根据IP地址与掩码生成网络格式 
>>> print (IP('192.168.1.0').make_net('255.255.255.0'))
192.168.1.0/24
 (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'

3. 多网格计算方法

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

(1)判断 IP 地址和网段是否包含于另一个网段
>>> from IPy import IP
>>> '192.168.1.100' in IP ('192.168.1.0/24')
True
(2)判断两个网段是否存在重叠 
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
1
>>> IP('192.168.0.0/24').overlaps('192.168.1.0/24')
0

 注释:0表示不重叠,1表示有重叠

(3)根据输入的 IP 或子网返回网络、掩码、广播、反向解析、子网数、ip 类型等信息
>>> from IPy import IP
>>> ip=IP('192.168.10.0/24')
>>> print( ip.net())#子网地址
192.168.10.0
>>> print( ip.netmask())#子网掩码
255.255.255.0
>>> print( ip.broadcast())##广播地址
192.168.10.255
>>> print(len(ip))##地址数量
256
>>> ips=IP('192.168.10.101')
>>>print('reverse address:%s'% ips.reverseNames()[0])#反向区域的名称
>>>print('hexadecimal:%s'% ips.strHex()) ##转换成16 进制
>>>print('binary ip:%s'% ips.strBin()) #转换成二进制
>>>print('iptype:%s'%ips.iptype()) ##地址类型 (公有私有)
 (4)给定一个子网 10.0.0.16/29,计算子网地址、子网掩码、广播地址、可用 IP 数量,
1)计算子网地址
>>> IP('10.0.0.16/29').net()
IP('10.0.0.16')
 2)计算子网掩码
>>> IP('10.0.0.16/29').netmask()
IP('255.255.255.248')
 3)计算广播地址
>>> IP('10.0.0.16/29').broadcast()
IP('10.0.0.23')
 4)显示地址范围
>>> IP('10.0.0.16/29').strNormal(3)
'10.0.0.16/29'
 5)可用 IP 数量
>>> len(IP('10.0.0.16/29'))
8
6)列出所有 IP 地址 
>>>for x in IP('10.0.0.16/29'):
 print(x)

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

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

1.什么是 Paramiko

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

[root@localhost ~]# pip3 install paramiko

2. Paramiko 基本用法

        Paramiko 模块的基本用法非常简单,我们可以使用 Paramiko 的 ssHclient 类来创建一个 SSH 客户端对象,并连接到 SSH 服务器。下面是一个基本的例子:

>>> import paramiko
>>> ssh=paramiko.SSHClient()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect('192.168.10.102',username='root',password='aptech')

         在这个例子中,我们首先创建了一个 ssHclient 对象,并使用 set missing host key_policy 方法来允许自动添加缺失的 SSH密钥。然后,我们使用 connect 方法连接到 SSH服务器,传入主机名、用户名和密码作为参数。
        现在,我们已经成功地连接到 SSH服务器。接下来,我们可以使用ssHclient 对象来执行远程命令,。例如获取服务器的操作系统信息:

>>> stdin,stdout,stderr=ssh.exec_command('uname -a')
>>> print(stdout.read())
b'Linux localhost.localdomain 6.8.7-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Apr 17 15:04:09 EDT 2024 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/pass.txt'
>>> sftp.put(local_file,remote_file)
<SFTPAttributes: [ size=846 uid=0 gid=0 mode=0o100644 atime=1728956666 mtime=1728956666 ]>
>>> sftp.close()

         这个例子中,我们首先使用 open_sftp 方法打开 SFTP 会话,并使用 put 方法来上传本地文件到远程服务器。我们还使用了 sftp.close()方法来关闭 SFTP 会话。

3.使用 Paramiko 实现 SSH 远程操作

        现在,我们已经了解了 Paramiko 的基本用法,接下来,我们将使用 Paramiko 来远程操作服务知我们将实现以下功能:

  • 连接到 SSH 服务器并执行一些基本命令
  • 创建和删除文件夹
  • 上传和下载文件

接下来,我们来编写 Python 脚本。

#首先,我们先导入必要的模块:
import os
import paramiko

#定义一些常量,包括SSH 服务器的主机名、用户名和密码
HOST ='192.168.10.102
USER ='root
PASSWORD ='aptech'

#使用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:
    pass
  sftp.close()
#这个函数接收一个路径参数,并使用SFTP会话创建一个日录
#定义了功能来上传和下载文件
def upload file(local path,remote path):
  sftp = ssh.open sftp()
  sftp.put(local path,remote path)
  sftp.close()
def download file(remote path,local path):
  sftp = ssh.open sftp()
  sftp.get(remote path,local path)
  sftp.close()
#这些函数分别接收一个本地路径和远程路径(用于上传)或一个远程路径和本地路径(用于下载),并
#使用 SFTP 会话来上传或下载相应的文件。
#定义一个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 ~l# python3 myssh.py

         此时前往远程主机 192.168.10.102,应该会在/opt 目录下看到上传过去的文件“fstab bak”,还可以看到在/opt 目录下我们创建了一个“mydir”目录,并且在本地 root 用户的家目录下,也会看到下载下来的此文件。
        使用 Paramiko 模块可以轻松实现 SSH 远程操作。在本文中,我们介绍了 Paramiko 的基本用法,并演示了如何在 Python 中使用 Paramiko 来远程管理服务器。无论是在云计算还是物联网领域,Paramiko都是一个非常有用的工具,可以帮助我们实现服务器管理的自动化。

三、利用 Python 实现邮件发送

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

1.发送邮件的基本步骤

        代码发送邮件的步骤,和人工发送邮件步骤基本一致:登录邮箱->准备邮件内容 ->发送邮件。
代码逻辑如下:

import smtplib

(1)连接邮箱服务器

连接对象 = smtplib.SMTP SSL(服务器地址,邮箱服务端口)

-服务器地址:smtp.163.com(163 邮箱)、smtp.q9.com(99 邮箱)-邮箱服务端口:465 或者 25

(2)登录邮箱 连接对象.login(邮箱账号,授权码)

2.准备数据

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

代码逻辑如下:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
(1)创建邮件对象
邮件对象=MIMEMultipart()
(2)设置邮件主题
主题对象 = Header(邮件标题,编码方式).encode()
邮件对象['subject'1=主题对象
(3)设置邮件发送者
邮件对象['From']='用户名<用户名>'
(4)设置邮件接受者
邮件对象['To']='收件人1;收件人2;收件人 3...'

(5)添加文字内容
文字内容对象=MIMEText(内容,类型,编码方式)
-内容:就是文字字符串
-类型:plain(简单的文字内容)、html(超文本)邮件对象.attach(文字对象)

3. 发送邮件

代码逻辑如下:

连接对象.sendmail(发件人,收件人,邮件对象.as_string())
连接对象.quit()

 4.发送邮件代码

发送邮件的具体代码如下所示:

[root@localhost ~]# vim myssh.py
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

con=smtplib.SMTP('smtp.qq.com',25)

con.login('自己QQ@qq.com','自己的授权码')

msg=MIMEMultipart()
subject=Header('Python邮件测试标题','utf-8').encode()
msg['Subject']=subject

msg['From']='3315715079@qq.com <3315715079@qq.com>'

msg['To']='3315715079@qq.com'

text=MIMEText('Python邮件测试正文','plain','utf-8')
msg.attach(text)

con.sendmail('3315715079@qq.com','3315715079@qq.com',msg.as_string())
con.quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值