#! _*_ coding:utf-8 _*_
import os,sys,re,fileinput,socket
device_list = []
ip_list = []
ip_end = []
end_ip = []
gw = []
def warning():
print("\033[31;1m注意:脚本目前不完善,请确认ifconfig网卡信息,不要有多余的网卡,如(docker0等),可能会导致错误!!!\033[0m")
user_input = input("是否以确认ifconfig信息(y or n):")
if user_input == "y":
pass
elif user_input == "n":
exit()
else:
exit()
warning()
def test_1(func):
def bashrc_file(*args,**kwargs):
func()
dic = dict(map(lambda x,y:[x,y],end_ip,device_list))
dic_2 = dict(map(lambda x,y:[x,y],ip_end,device_list))
with open("/root/.bashrc","a+") as file:
for ip_2,device_2 in dic_2.items():
os.system("echo 'ip route flush table %s' >> /root/.bashrc"%device_2)
for gw_1 in gw:
dic_3 = dict(map(lambda x,y:[x,y],gw_1,device_list))
for k,v in dic_3.items():
os.system("echo 'ip route ad default via %s dev %s table %s' >> /root/.bashrc"%(k,v,v))
for j,i in dic_2.items():
os.system("echo 'ip rule ad from %s table %s' >> /root/.bashrc"%(j,i))
return bashrc_file
 
@test_1
def readDevice():
os.system("ifconfig >> /root/ifconfig.conf")
for num in range(50):
with open("/root/ifconfig.conf","r") as file:
for line in file:
if "eth%s: "%num in line:
a = line.strip().split(":")
a_list = []
a_list.append(a[0])
for loop in a_list:
device_list.append(loop)
 
with open("/root/ifconfig.conf","r") as file:
for line in file:
result = re.findall('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}',line)
if not result == []:
IP_list = []
IP_list.append(result[0])
for loop_1 in IP_list:
ip_list.append(loop_1)
ip_end.append(loop_1)
for i in ip_end:
end_ip.append(i.split(".")[3])
 
ip_list.remove("127.0.0.1")
end_ip.remove("1")
ip_end.remove("127.0.0.1")
 
dic = dict(map(lambda x,y:[x,y],end_ip,device_list))
dic_2 = dict(map(lambda x,y:[x,y],ip_end,device_list))
 
for k,v in dic.items():
os.system("echo %s %s >> /etc/iproute2/rt_tables"%(k,v))
 
for route_flush in device_list:
os.system("ip route flush table %s"%route_flush)
 
user_input_gw = input("请按网卡顺序添加网关(以空格分割):").split(" ")
gw.append(user_input_gw)
for i in gw:
dic_gw = dict(map(lambda x,y:[x,y] ,i,device_list))
for k,v in dic_gw.items():
os.system("ip route add default via %s dev %s table %s"%(k,v,v))
 
for ip_1,device_1 in dic_2.items():
os.system("ip rule add from %s table %s"%(ip_1,device_1))
 
os.system("rm -rf ifconfig.conf")
readDevice()
 

linux添加策略路由python脚本(待完善)的更多相关文章

  1. Python脚本:Linux自动化执行Python脚本

    1.环境及其工具: ubuntu 16.04 python2.7(自带) pip2.7(安装) virtualenv(安装) crontab (自带) 2.pip2.7安装 (1)尝试使用 sudo ...

  2. linux添加开机自启动脚本示例详解

    linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的; 一.在/etc/rc.local中添加如果不想将脚本粘来粘去,或创建链接什么的,则:step1. 先修改好脚本,使其所有 ...

  3. Linux下设置python脚本文件为服务

    (最简单的方式nohup python xxx.py) ------------------------------------------------------------------------ ...

  4. 【Linux学习】python脚本直接运行与nohup运行结果不同

    之前遇到问题,在云主机上运行python脚本直接运行与nohup运行结果不同,甚至nohup根本运行不出来. 后来参考下别人的博客,终于知道问题了. nohup 使用的python版本问题. 而且no ...

  5. linux crontab执行python脚本问题

    在工作中我们经常会写一个python脚本,然后想通过定时任务去执行,这时我们会想到crontab. 通过 crontab -e去设置crontab 例如:0     0       *       * ...

  6. linux 添加开机自启动脚本

    原文 Linux设置服务开机自动启动的方式有好多种,这里介绍一下通过chkconfig命令添加脚本为开机自动启动的方法. 1. 编写脚本autostart.sh(这里以开机启动redis服务为例),脚 ...

  7. [Python]linux自己定义Python脚本命令

    在window下写好的程序配置到Linux上,要实现随意文件夹下的命令调用. 因为初学Linux,这里从文件传输等最主要的方法入手,记录配置的过程中遇到的各种问题. 连接远端server 这里使用pu ...

  8. linux添加开机启动脚本

    [root@mysql ~]# ll /etc/rc.local lrwxrwxrwx. 1 root root 13 Mar 12 22:20 /etc/rc.local -> rc.d/rc ...

  9. linux定时执行python脚本

    每天清晨 4:00:01,用python执行/opt/aa.py文件. 编辑定时任务: #crontab -e 加入: 0 4 * * * python /opt/aa.py 保存,退出即可. 如果执 ...

随机推荐

  1. apache调优技巧之一隐藏apahce版本信息

    如果你的服务器版本信息是这样的,是很 危险的. [root@xinsz63 httpd-2.2.27]# curl -I 192.168.1.38 HTTP/1.1 403 Forbidden Dat ...

  2. JAVA编程思想 Ch3.5题

    练习5:创建一个class类,包含连两个String字段 :name.says.在main方法中创建两个Dog方法 一个命名为spot 叫声为 Ruff,另一个命民为scruffy,叫声为:Wuff: ...

  3. 2019/02/16 STL容器 :栈

    一.栈(stack) 1.定义: 栈是一种只能在某一端插入和删除数据的特殊线性表.他按照先进先出的原则存储数据,先进的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后被压 ...

  4. python进程/线程/协程

    一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...

  5. B - Legacy CodeForces - 787D 线段树优化建图+dij最短路 基本套路

    B - Legacy CodeForces - 787D 这个题目开始看过去还是很简单的,就是一个最短路,但是这个最短路的建图没有那么简单,因为直接的普通建图边太多了,肯定会超时的,所以要用线段树来优 ...

  6. Lasso回归

    Lasso 是一个线性模型,它给出的模型具有稀疏的系数(sparse coefficients).它在一些场景中是很有用的,因为它倾向于使用较少参数的情况,能够有效减少给定解决方案所依赖变量的个数.因 ...

  7. 动态代理学习(一)自己动手模拟JDK动态代理

    最近一直在学习Spring的源码,Spring底层大量使用了动态代理.所以花一些时间对动态代理的知识做一下总结. 我们自己动手模拟一个动态代理 对JDK动态代理的源码进行分析 文章目录 场景: 思路: ...

  8. NIO(一) Java NIO 概述

    转:http://ifeve.com/overview/ Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和 ...

  9. 07_CSS入门和高级技巧(5)

    超级链接美化 1.伪类 同一个超级链接,根据用户的点击情况,有自己样式: 超级链接根据用户点选情况,有4种状态: a:link 没有访问的超级链接 a:visited 已经访问的超级链接 a:hove ...

  10. 拒绝老土!暗黑风格半透平面化主题—InfinityFreedom正式发布

    经常听到“路由器界面土点就土点吧,凑合能用就成.” 诚然,路由器重要的是功能,但为什么要辣眼睛呢? 拯救喜欢折腾的你,抢救干涩的眼球,原创OpenWrt主题Infinity Freedom正式发布! ...