Golang は、近年人気が高まっている高性能プログラミング言語です。プラットフォームからの独立性、オープンソース コード、強力な同時プログラミング機能などの特徴を持ち、ネットワーク プログラミング、分散システム、運用保守などに広く使用されています。オートメーションやその他の分野。
ネットワーク プログラミングでは、多くの場合、ネットワーク通信機能を実装するためにネットワーク カードをセットアップする必要があります。この記事では、Golang を使用してネットワーク カードを設定し、TCP/IP プロトコル スタックの書き込みを実装する方法を紹介します。
1. ネットワーク カード リストの取得
Golang では、net パッケージのインターフェイス関数を使用してネットワーク カード リストを取得します。具体的なコードは次のとおりです。
package main import ( "fmt" "net" ) func main() { ifaces, err := net.Interfaces() if err != nil { fmt.Println("获取网卡列表失败:", err) return } for _, iface := range ifaces { fmt.Println(iface.Name, iface.HardwareAddr) } }
net.Interfaces() 関数を呼び出すと、すべてのネットワーク カード インターフェイス情報を取得し、ループ トラバーサルを通じて各ネットワーク カードの名前、MAC アドレス、その他の属性を取得できます。 。プログラムが出力する結果は次のとおりです。
en0 0a:00:27:00:00:00 en1 0a:00:27:00:00:01 lo0 00:00:00:00:00:00 bridge0 02:5b:a5:b5:73:01
このうち、en0 と en1 はイーサネット ネットワーク カード、lo0 はローカル ループバック インターフェイス (127.0.0.1)、bridge0 はブリッジ ネットワーク カードを表します。
2. ネットワーク カードの IP アドレスを設定します
Golang では、net.Interface.Addrs()
関数を使用して、# を呼び出してすべての IP アドレス情報を取得できます。 # #net.ParseIP() 関数を使用して文字列形式の IP アドレスを解析し、
iface.Addrs() 関数を呼び出してネットワーク カードのすべての IP アドレスを取得し、それらを設定します。
package main import ( "fmt" "net" ) func main() { iface, err := net.InterfaceByName("en0") if err != nil { fmt.Println("获取网卡接口失败:", err) return } addrs, _ := iface.Addrs() for _, addr := range addrs { if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { err := iface.Addrs().(*net.IPNet).IP.To4()[0], iface.Addrs().(*net.IPNet).IP.To4()[1], iface.Addrs().(*net.IPNet).IP.To4()[2], 200).To4()) if err != nil { fmt.Println("设置IP地址失败:", err) return } fmt.Println("设置IP地址成功:", ipnet.IP.String()) } } } }
net.InterfaceByName() 関数を使用してネットワーク カード インターフェイスを取得します。
iface.Addrs()関数は、指定された名前の情報を取得し、すべての IP アドレス情報を取得し、それを走査して設定します。このうち、文字列で表される IP アドレスは、
net.ParseIP() 関数を使用して IP アドレス型の値に解析され、IP アドレス型の値配列が生成され、最後に
iface を使用します。Addrs().(*net.IPNet).IP.To4()[0]、iface.Addrs().(*net.IPNet).IP.To4()[1]、iface.Addrs ().(* net.IPNet).IP.To4()[2], 200).To4())関数は、IP アドレスを指定された IP アドレスに設定します。
ifconfig コマンドを使用してネットワーク カードを有効にすることができます。具体的なコードは次のとおりです。
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("/sbin/ifconfig", "en0", "up") err := cmd.Run() if err != nil { fmt.Println("启用网卡失败:", err) return } fmt.Println("启用网卡成功") }
os/exec パッケージの
Command() 関数を使用して、シェル コマンドを実行するオブジェクトを作成します。を呼び出し、オブジェクトの
Run() 関数を使用して、指定された名前のネットワーク カードを有効にします。アクティベーションが成功すると、「ネットワーク カードが正常に有効になりました」というメッセージが表示されます。有効化に失敗すると、エラー メッセージが出力されます。
以上がgolang セット ネットワーク カードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。