Go语言实现linux系统操作系统及配置网络信息

package ipset



import (

	"bytes"

	"fmt"

	"io/ioutil"

	"os/exec"

	"strconv"

)



type Ipset struct {

	IP      string

	Netmask string

	GateWay string

	DNS1    string

	DNS2    string

}



// Ping 执行ping命令

func (i *Ipset) Ping(timeout int) bool {

	var to = strconv.Itoa(timeout)

	cmd := exec.Command("ping", i.IP, "-c", "1", "-w", to, "-W", to)

	if cmd == nil {

		return false

	}

	err := cmd.Run()



	return err == nil

}



// Start 设置并启动服务

func (i *Ipset) Start() bool {

	err := i.command()

	if err != nil {

		return false

	}



	err = i.file()

	if err != nil {

		return false

	}



	return i.restart()

}



// 启动网络生效

func (i *Ipset) restart() bool {

	cmd := exec.Command("service", "network", "restart")

	if cmd == nil {

		return false

	}

	_, err := cmd.Output()



	if err != nil {

		return false

	}



	return true

}



// 修改配置文件

func (i *Ipset) file() error {

	buf := bytes.NewBuffer([]byte{})

	buf.WriteString("DEVICE=eth0\n")

	buf.WriteString("BOOTPROTO=static\n")

	buf.WriteString("ONBOOT=yes\n")

	buf.WriteString(fmt.Sprintf("IPADDR=%s\n", i.IP))

	buf.WriteString(fmt.Sprintf("NETMASK=%s\n", i.Netmask))

	buf.WriteString(fmt.Sprintf("GATEWAY=%s\n", i.GateWay))

	if i.DNS1 != "" {

		buf.WriteString(fmt.Sprintf("DNS1=%s\n", i.DNS1))

	}

	if i.DNS2 != "" {

		buf.WriteString(fmt.Sprintf("DNS2=%s\n", i.DNS2))

	}



	file := &Eth0{filename: NET_FILE}

	return file.Write(buf.Bytes())

}



// 执行命令修改ip地址

func (i *Ipset) command() error {

	err := i.create("./file.sh")

	if err != nil {

		return err

	}

	cmd := exec.Command("/bin/bash", "./file.sh")

	_, err = cmd.Output()

	if err != nil {

		return err

	}



	return nil

}



// 命令行写入

func (i *Ipset) create(filename string) error {

	buf := bytes.NewBuffer([]byte{})

	buf.WriteString("#!/bin/bash\n")

	buf.WriteString("echo 设置ip子网掩码\n")

	buf.WriteString(fmt.Sprintf("ifconfig eth0 %s netmask %s\n", i.IP, i.Netmask))

	buf.WriteString(fmt.Sprintf("route add default gw %s\n", i.GateWay))



	err := ioutil.WriteFile(filename, buf.Bytes(), 0755)

	if err != nil {

		return err

	}



	return nil

}
soar 1年前

Eth0构造体是什么?


soar 1年前

Eth0构造体是什么?


soar 1年前

Eth0构造体是什么?


soar 1年前

Eth0构造体是什么?


cjh 1年前

Eth0构造体是一个网络接口的数据结构,用于表示计算机系统中的网络接口。该数据结构包含了网络接口的各种属性和配置信息,如MAC地址、IP地址、子网掩码、网关等。在Linux系统中,Eth0构造体是一个非常重要的数据结构,用于管理系统中的网络接口。通过对Eth0构造体的配置和管理,可以实现网络接口的初始化、启动、停止、配置等操作。同时,Eth0构造体也是网络编程中的重要概念,用于表示网络数据包的来源和目的地。在网络编程中,程序可以通过Eth0构造体来获取网络接口的信息,从而实现网络通信和数据传输。综上所述,Eth0构造体是一个非常重要的数据结构,对于计算机系统的网络管理和网络编程都具有重要的意义。