ホームページ > バックエンド開発 > Golang > Golang を使用してネットワーク カードをクエリする方法

Golang を使用してネットワーク カードをクエリする方法

PHPz
リリース: 2023-04-03 10:14:43
オリジナル
1920 人が閲覧しました

Golang (Go 言語とも呼ばれる) は、大規模で信頼性の高いソフトウェアの構築に適したオープンソース プログラミング言語です。 Golang は 2007 年に Google によって開発され、最も人気のあるプログラミング言語の 1 つになりました。分散プログラミングやネットワークプログラミングだけでなく、さまざまなサーバーサイドやインターネットアプリケーションの分野でも広く使用されています。

この記事では、Golang を使用してネットワーク カードをクエリする方法を紹介します。

  1. net パッケージの使い方

Golang では、net パッケージの機能を利用することで、ネットワークへのアクセスや操作が簡単に行えます。具体的には、ネットワーク インターフェイスにクエリを実行することでネットワーク カード情報を取得できます。次のコードは、ホスト上のすべてのネットワーク カード インターフェイスを取得する方法を示しています。

package main

import (
    "fmt"
    "net"
)

func main() {
    ifaces, err := net.Interfaces()
    if err != nil {
        fmt.Println("get interfaces err:", err)
        return
    }
    for _, iface := range ifaces {
        fmt.Printf("Interface:%v\n", iface.Name)
        addrs, err := iface.Addrs()
        if err != nil {
            fmt.Println("get addrs err:", err)
            continue
        }
        for _, addr := range addrs {
            fmt.Printf("\tIP Address:%v\n", addr)
        }
    }
}
ログイン後にコピー

このコードでは、最初に net.Interfaces() 関数を呼び出してホスト上のすべてのネットワーク インターフェイスを取得し、各ネットワークをループします。加工用のカードです。ネットワーク カードごとに、Addrs() 関数を呼び出して、ネットワーク カードに関連付けられた IP アドレスを取得し、関連情報を出力します。

  1. ネットワーク カード名の意味

上記のコードでは、iface.Name を使用してネットワーク カード インターフェイスの名前を取得します。 Linux システムでは、この名前は通常、「eth0」、「wlan0」などの複数の部分で構成されます。この名前の意味は次のとおりです。

  • lo: ループバック インターフェイス (Loopback) を示します。
  • ethN: イーサネット カード インターフェイスを示します。N は整数で、N 番目のネットワーク ポート # を示します。
  • ##wlanN: ワイヤレス ネットワーク カード インターフェイスを表します。N は N 番目のワイヤレス ネットワーク ポートを表す整数です。
さらに、tun、タップなど、これらのインターフェイスは、ネットワーク トンネリングや仮想化などのアプリケーションに使用されます。

    ネットワーク カードの MAC アドレスを取得する
ネットワーク プログラミングでは、MAC アドレスは特定のネットワークを一意に表すことができるため、非常に重要な情報です。カード。 Golang では、次のコードを使用してネットワーク カードの MAC アドレスを取得できます。

package main

import (
    "fmt"
    "net"
)

func getMacAddress(iface net.Interface) net.HardwareAddr {
    addr, err := iface.Addrs()
    if err != nil {
        fmt.Println("get addrs err:", err)
        return nil
    }
    for _, addr := range addr {
        ipAddr, ok := addr.(*net.IPNet)
        if !ok {
            continue
        }
        if ipAddr.IP.IsLinkLocalUnicast() {
            return iface.HardwareAddr
        }
    }
    return nil
}

func main() {
    ifaces, err := net.Interfaces()
    if err != nil {
        fmt.Println("get interfaces err:", err)
        return
    }
    for _, iface := range ifaces {
        fmt.Printf("Interface:%v\n", iface.Name)
        fmt.Printf("\tMAC Address:%v\n", getMacAddress(iface))
    }
}
ログイン後にコピー
このコードでは、関数 getMacAddress() を定義します。この関数は、ネットワーク カード インターフェイスをパラメータとして受け取り、ネットワークカードのMACアドレス。 main 関数のすべてのネットワーク ポートをループし、ネットワーク ポート名と対応する MAC アドレスを出力します。

    概要
この記事では、Golang でネットワーク カードをクエリする方法を紹介します。 net パッケージの関連機能を使用すると、ホスト上のすべてのネットワーク インターフェイスを簡単に取得し、ネットワーク カードの MAC アドレスなどの重要な情報を取得できます。この情報を理解することは、ネットワーク プログラミングとシステム管理に役立ちます。

以上がGolang を使用してネットワーク カードをクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート