python批量做网卡bond

news2025/1/13 10:23:00

python脚本获取服务器网卡的MAC地址和本机IP

#!/usr/bin/python

import fcntl,socket,struct

def getHwAddr(ifname):

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', ifname[:15]))

    return ':'.join(['%02x' % ord(char) for char in info[18:24]])

def Get_host_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('10.0.0.1', 8888))
        ip = s.getsockname()[0]
    finally:
        s.close()
    print(ip)

def get_hw_address(ifname):
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     info = fcntl.ioctl(s.fileno(),0x8927,struct.pack('256s', ifname[:15]))
     hwaddr = []
     #print len(info)
     for char in info[18:24]:
         hdigit = '%02x' % struct.unpack('B',char)[0]
         hwaddr.append(hdigit)
     print(':'.join(hwaddr))


print(getHwAddr('eth1'))
Get_host_ip()
get_hw_address('eth1')

运行结果:

在Linux中,hwaddr代表硬件地址(Hardware Address),也被称为MAC地址(Media Access Control Address)。MAC地址是分配给网络设备(如网卡)的唯一标识符。它由六个十六进制数对表示,例如:00:1A:2B:3C:4D:5E

python实现配置网卡bond

思路:

1、将ifcfg-eth0 ifcfg-eth1 ifcfg-bond0文件打包成bond.tgz文件,拷贝到主机并解压,将原始的ifcfg-eth1文件mv到/tmp下

[root@szxhy-sys-dhcp00 bond-net]# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet 

ONBOOT=yes
SLAVE=yes 
MASTER=bond0  
BOOTPROTO=none
[root@szxhy-sys-dhcp00 bond-net]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet 
ONBOOT=yes
SLAVE=yes 
MASTER=bond0  
BOOTPROTO=none
[root@szxhy-sys-dhcp00 bond-net]# cat ifcfg-bond0 
DEVICE=bond0 
TYPE=Ethernet 
USERCTL=no 
ONBOOT=yes 
BONDING_OPTS="miimon=100 mode=4"
BOOTPROTO=static
IPADDR=
NETMASK=255.255.255.0
GATEWAY=

2、主要需要配置ifcfg-bond0文件,用函数实现获取本机ip和网关,并写入到ifcfg-bond0文件

3、重启服务

# --*-- coding:utf-8 --*--

import socket,struct,fcntl,sys
from commands import getoutput
import os
import subprocess
import urllib2
import sys
import time
from optparse import OptionParser

def exec_run(cmd):
        stdoutls = []
        def receive():
            (stdout) = \
                proc.communicate()
        try:
            for rcmd in cmd:
                proc =subprocess.Popen(rcmd,
                        shell=True,
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE)
                while proc.returncode is None:
                    stdout = proc.communicate()
                stdoutls.append(stdout)
        except Exception,e:
           print e
           sys.exit(0)
        finally:
           return stdoutls

def Get_host_ip():    获取本机的ip
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('10.0.0.1', 8888))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip


def get_gateway():
    file = "/tmp/ifcfg-eth0"
    with open(file) as f:
        content = f.readlines()
    if content:
        for line in content:
            if ("GATEWAY" in line):
                return(line.replace("\n", ""))

def get_url():
    os.chdir("/opt")
    f = urllib2.urlopen("http://10.2.56.6/xhy_kubeinit/bond-net.tgz")
    data = f.read()
    with open("bond-net.tgz", "wb") as code:
        code.write(data)
    exec_run(["tar zxvf bond-net.tgz"])

def set_info():
    if os.path.exists("/etc/sysconfig/network-scripts/ifcfg-eth0"):
        os.chdir("/opt/bond-net")
        exec_run(["mv /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp","mv * /etc/sysconfig/network-scripts/"])
        getoutput("sed -i 's@IPADDR=@IPADDR=%s@g' /etc/sysconfig/network-scripts/ifcfg-bond0" % (Get_host_ip()))
        getoutput("sed -i 's@GATEWAY=@GATEWAY=%s@g' /etc/sysconfig/network-scripts/ifcfg-bond0" % (get_gateway()))
        os.system("service network restart")
    else:
        print("no such file")
        sys.exit(0)

if __name__ == '__main__':
    set_info()



socket函数

s.connect(address) 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

s.getsockname()  返回套接字自己的地址。通常是一个元组(ipaddr,port)

urllib模块urlopen()函数

Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据。

urlopen(url, data=None, proxies=None)

f = urllib2.urlopen("http://10.2.56.6/xhy_kubeinit/bond-net.tgz")

参数url表示远程数据的路径,一般是网址;

参数data表示以post方式提交到url的数据(玩过web的人应该知道提交数据的两种方式:post与get);
参数proxies用于设置代理。

urlopen返回 一个类文件对象(fd),它提供了如下方法:
read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样;
info():返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息(header)
getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;
geturl():返回请求的url;

os.system

system函数可以将字符串转化成命令在服务器上运行;

Subprocess.run

import subprocess
import shlex
# process=subprocess.run(["date"])
# print(process)

# process=subprocess.run(["date","-y"])
# print(process)

# process=subprocess.run(shlex.split("date -y"))
# print(process)
#
#
# process=subprocess.run(shlex.split("date -y"),check=True)  ##执行失败就跳出错误,而不是继续运行
# print(process)

# process=subprocess.run(shlex.split("echo 'hello world'")) 
# print(process)

# process=subprocess.run(shlex.split("date +%D"),capture_output=True)
# print(process)
# print(process.stdout.decode())


# process=subprocess.run(shlex.split("python ask.py"),capture_output=True,input="yes".encode())
# print(process)
# print(process.stdout.decode())


Subprocess.popen

import subprocess
import shlex

process=subprocess.Popen(shlex.split("python ask.py"),stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
print('next line')  #直接输出,Popen不会阻塞,run方法会阻塞
print(process)
process.stdin.write('yes\n'.encode())
process.stdin.flush()

print(process.stdout.read())

 

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

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

相关文章

gPRC代理方式详细介绍

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【官方中文文档】Mybatis-Spring #目录

目录 此页面用于在GitHub上呈现索引。 NOTE: 由于链接目标是在使用maven-site-plugin转换为html的假设下指定的,因此在GitHub上的呈现中有一个锚点已损坏。 简介入门SqlSessionFactoryBean事务使用 SqlSession注入映射器Spring Boot使用 MyBatis APISpring Batch示…

针对论坛系统进行功能测试和性能测试

项目链接:飞鸽论坛 目录 一. 项目背景 二. 项目功能 三. 功能测试 注册: 登录: 更改用户信息: 发布帖子: 更新帖子信息: 点赞: 评论: 发送私信: 测试报告 四. 性能测试 Virtual User Generator Controller Analysis 测试报告: 一. 项目背景 该论坛系统采用前…

激活函数总结(十七):激活函数补充(PELU、Phish)

激活函数总结(十七):激活函数补充 1 引言2 激活函数2.1 Parametric Exponential Linear Unit(PELU)激活函数2.2 Phish激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、…

juc基础(二)

目录 一、集合的线程安全 1、List集合 2、hashset 3、hashmap 二、多线程锁 三、Callable&Future 接口 1、Callable接口 2、Future 接口 3、FutureTask 四、JUC 三大辅助类 1、减少计数 CountDownLatch 2、 循环栅栏 CyclicBarrier 3、信号灯 Semaphore 一、…

虚拟助手如何帮助您进行数字营销

您的企业值得有效的数字营销。您每天都在努力工作,为您的客户创造高质量的体验。世界需要更多地了解它!您的产品和服务应位于每个社交提要和每个相关搜索的顶部。然而,数字营销可能具有挑战性。您不想做出错误的决定并将营销资金花在错误的地…

电商平台淘宝1688京东拼多多商品详情sku数据api接口源代码展示示例

淘宝商品详情API接口是淘宝开放平台提供的一个HTTP接口,可以用来获取淘宝商品的详细信息,包括商品的标题、价格、运费、销量、评价等等。使用该接口可以方便地获取商品信息,进行数据分析或者开发自己的电商应用。 item_get-获得淘宝商品详情…

C#,数值计算——用算法加速序列的收敛的计算方法与源程序

算法对序列的收敛加速。初始化方式使用参数nmax调用构造函数,nmax是要求和的项数,以及eps,即所需的精度。然后连续调用next函数,参数为next部分和序列的。序列极限的当前估计值为next返回。检测到收敛设置标志cnvgd。 using Syst…

生成模型 -- GAN

文章目录 1. 生成模型与判别模型1.1 生成模型 2. VAE3. GAN3.1 GAN-生成对抗网络3.2 GAN-生成对抗网络的训练3.2.1 判别模型的训练:3.2.2 生成网络的训练: 4. LeakyReLU5. GAN代码实例 1. 生成模型与判别模型 生成模型与判别模型 我们前面几章主要介绍了…

【MyBatis】动态SQL > 重点:${...}和#{...}与resultMap和resultType的区别

目录 一、MyBatis动态sql 1.1 动态sql的作用 1.2 动态sql作用论证 1.2.1 条件判断&#xff1a;<if> 1.2.2 循环迭代&#xff1a;<foreach> 1.2.3 SQL片段重用 1.2.4 动态条件组合&#xff1a;<choose><when><otherwise> 1.2.5 <where…

kali的一些使用和ms08-067、ms17-010漏洞

VM虚拟机-三种网络连接方式&#xff08;桥接、NAT、仅主机模式&#xff09; 虚拟机网络连接 一、Bridged&#xff08;桥接&#xff09; 二、NAT&#xff08;网络地址转换&#xff09; 三、Host-Only&#xff08;仅主机&#xff09; 在vmware软件中&#xff0c;选项栏的“编…

【工具】VirtualBox虚拟机安装Windows操作系统

前面的文章中介绍了VirtualBox虚拟机的安装,VirtualBox虚拟机中如何安装操作系统,是本文的重点,下面将进行详细介绍。 使用VirtualBox虚拟机安装Windows操作系统有很多好处,主要包括以下几点: 节省资源:通过虚拟化技术,一台物理计算机可以同时运行多个虚拟机,每个虚拟…

什么是网站SSL证书?

SSL证书&#xff0c;使用SSL/TLS协议在服务器与客户端加密传输数据&#xff0c;提供身份验证的一种数字证书。 如果您不知道SSL证书&#xff0c;它还有一些别的叫法&#xff1a; HTTPS证书&#xff08;SSL证书能将网站从HTTP明文连接升级为HTTPS加密连接&#xff09;&#xf…

【Redis从头学-8】Redis中的ZSet数据类型实战场景之用户积分榜

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Re…

Day8.22 E. Unforgivable Curse (easyhard version)

文章目录 E1. Unforgivable Curse (easy version)E2. Unforgivable Curse (hard version) E1. Unforgivable Curse (easy version) Problem - 1800E1 - Codeforces 将s串转换成t串&#xff0c;每次能交换s串中下标绝对值差3或差4的字符 有点像bfs最小步数&#xff0c;但是字…

时序分解 | MATLAB实现基于SWD群体分解的信号分解分量可视化

时序分解 | MATLAB实现基于SWD群体分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于SWD群体分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于SWD群体分解的分量可视化&#xff0c;基于群体分解的信号分解技术&#xff0c;MATLAB程序…

软考高级系统架构设计师(二)计算机操作系统

【原文链接】软考高级系统架构设计师&#xff08;二&#xff09;计算机操作系统 2.1 进程管理 2.1.1 操作系统的三个重要作用 管理计算机中运行的程序和分配各种软硬件资源为用户提供友善的人机界面为应用程序的开发和运行提供一个高效的平台 2.1.2 操作系统的四个特征 并…

Android开发基础知识总结(四)简单控件(下)

一.按钮触控 最常见的按钮button类继承自Textview类。 需要注意的是&#xff0c;在Button中显示的单词默认全部大写 ~ public void onClick(View v){s1et1.getText().toString();//有一些小bug&#xff0c;好像变量必须声明在Onclick方法内部才有效&#xff1f;&#xff1f;&am…

数据结构-----树的易错点

1.树的度和m叉树 •度为m的树&#xff08;度表示该结点有多少个孩子&#xff08;分支&#xff09;&#xff09; 任意结点的度<m(最多m个孩子) 至少又一个结点度m(有m个孩子) 一定是非空树&#xff0c;至少有m1个结点 •m叉树 任意结点的度<m(最多有m个孩子) 允许所…

Shell 编程快速入门 之 数学计算和函数基础

目录 1. 求两数之和 整数之和 浮点数之和 2. 计算1-100的和 for...in C风格for循环 while...do until...do while和until的区别 关系运算符 break与continue的区别 3. shell函数基础知识 函数定义 函数名 函数体 参数 返回值 return返回值的含义 return与…