利用Python 程序实现Linux 网卡 bonding 实现

#!/usr/bin/env python

import os,sys,time,re,shutil
import socket
import fcntl
import struct
import traceback
import commands

#Get interface name
interface_path = ‘/etc/sysconfig/network-scripts/‘
def LOG(info):
    """ Log files ...."""
    logfile = ‘/root/pxe_install.log‘
    files = open(logfile,‘a‘)
    try:
        files.write(‘%s : %s \n‘%(time.ctime(),info))
    except IOError:
        files.close()
    files.close()

def get_interface ():
    os.chdir(interface_path)
    eth  = em = list()
    for inter in os.listdir(interface_path):
        if inter[0:-1] == ‘ifcfg-em‘:
            if inter == ‘ifcfg-em1‘ or inter == ‘ifcfg-em2‘:
                em.append(inter)
        elif inter[0:-1] == ‘ifcfg-eth‘:
            if inter == ‘ifcfg-eth0‘ or inter == ‘ifcfg-eth1‘:
                eth.append(inter)
    if eth:
        LOG("Getting interface file name %s is Ok" %eth)
        return eth
    else:
        LOG("Getting interface file name %s is Ok" %em)
        return em
 
def main():
    net_name = get_interface()
    ipaddr = str()
    for inter in net_name:
        try:
            shutil.move(inter,‘/opt/‘ + inter+‘.bak‘)
            _interface_config(inter)
            new_interface = inter.split(‘-‘)[-1]
            if _configure_bond(new_interface):
                _configure_bond(new_interface)
            LOG("bond script init is Ok")
        except Exception,e:
            LOG(traceback.format_exc())

    if _interface_modprobe():
        _interface_modprobe()
    
    if _rester_network():
        _rester_network()
 
# Set interface eth* or em*
def _interface_config(interface):
    """
        DEVICE=eth0
        BOOTPROTO=static
        NOBOOT=yes
        NM_CONTROLLED=no
        MASTER=bond0
        SLAVE=yes
    """
    fp = open(interface,‘w‘)
    new_interface = interface.split(‘-‘)[-1]
    if interface == ‘ifcfg-em1‘:
        fp.write(‘DEVICE=%s \n‘%new_interface)
        fp.write(‘BOOTPROTO=static \n‘)
        fp.write(‘ONBOOT=yes \n‘)
        fp.write(‘NM_CONTROLLED=no \n‘)
        fp.write(‘MASTER=bond0 \n‘)
        fp.write(‘SLAVE=yes \n‘)
    elif interface == ‘ifcfg-em2‘:
        fp.write(‘DEVICE=%s \n‘%new_interface)
        fp.write(‘BOOTPROTO=static \n‘)
        fp.write(‘ONBOOT=yes \n‘)
        fp.write(‘NM_CONTROLLED=no \n‘)
        fp.write(‘MASTER=bond0 \n‘)
        fp.write(‘SLAVE=yes \n‘)
    elif interface == ‘ifcfg-eth0‘:
        fp.write(‘DEVICE=%s \n‘%new_interface)
        fp.write(‘BOOTPROTO=static \n‘)
        fp.write(‘ONBOOT=yes \n‘)
        fp.write(‘NM_CONTROLLED=no \n‘)
        fp.write(‘MASTER=bond0 \n‘)
        fp.write(‘SLAVE=yes \n‘)
    elif interface == ‘ifcfg-eth1‘:
        fp.write(‘DEVICE=%s \n‘%new_interface)
        fp.write(‘BOOTPROTO=static \n‘)
        fp.write(‘ONBOOT=yes \n‘)
        fp.write(‘NM_CONTROLLED=no \n‘)
        fp.write(‘MASTER=bond0 \n‘)
        fp.write(‘SLAVE=yes \n‘)
    fp.close()

def _configure_bond(inter):
    """
    DEVICE=bond0
    BOOTPROTO=static
    ONBOOT=yes
    IPADDR=192.168.0.100
    NETMASK=255.255.255.0
    NETWORK=192.168.0.0
    BROADCAST=192.168.0.255
    """
    #bond name message
    if inter == ‘eth0‘:
        bond_name = ‘ifcfg-bond0‘
    elif inter == ‘em1‘:
        bond_name =  ‘ifcfg-bond0‘
    elif inter == ‘eth1‘:
        bond_name = ‘ifcfg-bond0‘
    elif inter == ‘em2‘:
        bond_name = ‘ifcfg-bond0‘
    # ip address message
    if _interface_get_ip(inter):
        ipaddr  = _interface_get_ip(inter)
    else:
        ipaddr = ‘0.0.0.0‘
    # ip net mask info
    try:
        net_mk  = os.popen(‘ip a |grep %s|grep inet‘ %inter).readlines()[0]
        res = net_mk.split()[1]
        net_masklen = res.split(‘/‘)[-1]
    except:
        net_masklen = 18
    net_mask = _interface_sum_master(net_masklen)
    # default gateway is ....
    try:
        net_gate = os.popen(‘ip route |grep default‘).readlines()[0]
        net_gateway = net_gate = net_gate.split(‘ ‘)[2]
    except:
        net_gateway = ‘0.0.0.0‘
   
    try:
        if ipaddr == ‘0.0.0.0‘:
            return ‘‘
        fp = open(bond_name,‘w‘)
        bond = bond_name.split(‘-‘)[-1]
        fp.write("DEVICE=%s \n" %bond)
        fp.write("BOOTPROTO=static \n")
        fp.write("ONBOOT=yes \n")
        fp.write("IPADDR=%s \n" %ipaddr)
        fp.write("NETMASK=%s \n" % net_mask)
        if bond == ‘bond0‘:
            fp.write("GATEWAY=%s \n" % net_gateway)
            fp.write("DNS1=202.106.0.20 \n")
            fp.write("DNS2=8.8.8.8 \n")
        LOG("ifcfg-bond* configure is Ok")
        return True
    except Exception,e:
        return False
 
def _interface_get_ip(inter):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        IP = socket.inet_ntoa(fcntl.ioctl(
            s.fileno(),
            0x8915,  # SIOCGIFADDR
            struct.pack(‘24s‘,inter))[20:24])
        return  IP
    except Exception,e:
        pass
        return
 
# Add modprobe bonding model
def _interface_modprobe():
    try:
        fp = open(‘/etc/modprobe.d/bonding.conf‘,‘w‘)
        fp.write("#Module options and blacklists written by bonding \n")
        fp.write("alias bond0 bonding \n")
        fp.write("options bond0 miimon=100 mode=1 \n")
        fp.close()
        x,y  = commands.getstatusoutput(‘modprobe bonding‘)
        if x != 0:
            LOG("modprobe bonding is failed")
        return True
    except:
        LOG(traceback.format_exc())
        return
 
# Restart Network
def _rester_network():
    x,y  = commands.getstatusoutput(‘service network restart‘)
    if x == 0:
        LOG("restart netowrk is Ok ")
        return True
    else:
        LOG("restart netowrk is Faild ")
        return
 
# According to the CIDR calculation.net master
def _interface_sum_master(net_master):
    mask =  (2** 8) - 2 ** (24 - int(net_master))
    return ‘255.255.%s.0‘ % mask
 
if __name__  == "__main__":
    sc = main()
时间: 2024-11-12 07:16:27

利用Python 程序实现Linux 网卡 bonding 实现的相关文章

利用python制作在Linux服务器后台定时运行的任务-邮件提醒

1. 自动任务的功能为: 定时扫描数据库中的记录,然后发邮件 代码如下 scheduleMail.py import pymysql import smtplib from email.mime.text import MIMEText from email.header import Header import time def sendMail(body): sender = '[email protected]' receiver = ['[email protected]', '[ema

linux,windows下检测指定的IP地址是否可用或者检测IP地址冲突的3种方式(批处理程序,python程序,linux shell 批量ping)

本文中的脚本适用范围: 1)检测某些IP地址是否被占用: 2)检测网络中某些设备是否存活: 3)在分配新的ip地址之前,批量检测环境中是否存在冲突的机器 以上检测基于ICMP Ping报文,要求所有的设备允许Ping,设备开通禁止ICMP策略,防火墙禁止ICMP报文等情况不在本文的考虑范围之内. 不多说,上代码: (一)windows 批处理脚本 1 ::autor lb 2 ::date 2018 05 3 @echo off 4 ::屏显当前的测试时间并输出到测试结果(详细日志和结果日志)

利用python程序浪漫安慰失恋妹纸

目的:昨天在朋友圈看到组里的一个妹纸貌似失恋了.于是想写个脚本程序安慰妹纸. 思路:把txt文件内容读取出来,打印心形等 # -*- coding:utf-8 -*- import sys import math import time def frange(start, end, step=1.0): if step > 0: while start < end: yield start start += step elif step < 0: while start > end

利用python实现网卡流量图表绘制!!!

项目背景: 利用python实现一个自动化的网卡流量图表绘制,这对于我们实现自动化运维平台有更深入的理解, 也会让我们对于现有的一些监控软件的一些实现都有很大的帮助. 实现环境: 虚拟机VMware Workstation 12 player 服务器:centos6.5的系统  ip:192.168.0.25 python2.6.6 rrdtool模块.time模块.psutil模块. SecureCRT ssh远程连接软件 实验过程: 思路其实很清醒:创建rrd数据库---->数据写入rrd数

Linux下使用pdb简单调试python程序

python自带调试工具库:pdb # -*- coding:utf-8 -*- def func(num): s = num * 10 return s if __name__ == '__main__': print 'debug starting...' print '*' * 10 print 'debug ending-' num = 100 s = func(num) print s 在python文件中不引用pdb库,可以在执行python文件的时候,加上参数: python -m

linux 多网卡bonding 绑定 端口聚合

将多个Linux网络端口绑定为一个,可以提升网络的性能,比如对于备份服务器,需要在一个晚上备份几个T的数据, 如果使用单个的千兆网口将会是很严重的瓶颈.其它的应用,比如ftp服务器,高负载的下载网站, 都有类似的问题. 因此使用Linux teaming或bond来绑定多个网卡作为一个逻辑网口,配置单个的IP地址,会大幅提升服务器的网络吞吐(I/O). Linux的多网卡绑定功能使用的是内核中的"bonding"模块,关于此模块可以参考Linux Ethernet Bonding Dr

利用python写出1加到任意数关于range()函数妙用的交互小程序

认真!????? ------------ 利用Python写的一个从1加到任意大小的数字(电脑吃得消再说)的交互脚本. 在这里我运用了range函数(我喜欢叫它蟒岭函数,因为range有“岭”的意思),此函数可以有个有趣的用法:range(x),解释器会列出从0~x-1的所有整数:如果是range(y,x),解释器就会列出从从y~x-1的所有整数(x-1 等价于 不包括x,应该能够理解吧):还有一种range(y,x,z),解释器就会跳跃z列出从y~x-1的所有整数,默认的跳跃间距为1,就如r

利用Python演算世界杯比赛结果,程序员气的拍桌子,后悔晚了!

有些事情受万众瞩目,它不是说受某一个行业,某一类人,而是全人类.6月份就有一件大事,那就是"世界杯"! 有些热爱足球的小伙伴肯定关心的是比赛的过程.结果,自己喜欢的足球运动员是否能在比赛场上,驰聘风云,大展雄风.然而我们却都知道除此以外,还有些光明正大的足球菠菜存在,对于有些资深的玩家,甚至说给我一百块,我就可以买房...(文末三段话,必看!) 你以为你是Python程序员吗?你有科学的依据证明到底谁能胜场,比赛结果是几比几吗?你只能靠经验,比一般人强一点.就跟我听到的一个笑话一样:&

利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别

利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别 分类: 开放项目2012-07-23 17:28 6712人阅读 评论(0) 收藏 举报 tiffimagecompression引擎pascalcharacter --------------------------------------------------低调的分割线--------------------------------------------------- Linux下有两个重要的编程准则