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

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

PHPz
PHPzオリジナル
2023-04-03 09:18:181831ブラウズ

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 までご連絡ください。