次のエントリ: GD::Barcode::NW7でバーコード作成 [perl]
MACアドレスの取得[2]
2007-02-26-1 / カテゴリ: [programming][win][c] / [permlink]
[2007-02-21-2]の続き。
Windows/ネットワークプログラミング discypus経由。
GetIfTable() を使う方法
インターフェースの一覧取得
iphlpapi.h を include して iphlpapi.lib をリンクして取得する。非アクティブなNICのMACも取得できた。MAC以外にいろいろ取得できるっぽい。
手元の環境ではなぜか搭載NIC数+1が検出されて、最後のNICはMACが 00:00:00:00:00:00 になる…と思ったら、ループバックインタフェースの情報だった。
現在のIPアドレス情報はなさげ。
データ構造体の定義は iprtrmib.h より。(コメントは追加)
GetAdaptersInfo() を使う方法。
ネットワークアダプタ情報の取得(GetAdaptersInfo)
同じく iphlpapi.h を include して iphlpapi.lib をリンクする。非アクティブNICもOK。ループバックインタフェースは含まれない。
以下、構造体定義。iptypes.h より。
How do I get the MAC (a.k.a. hardware) address of the local Ethernet adapter? 4.7 の方法はよくわからんかった。second methodのExamples: Get MAC Address, RPC Methodだと、実行するたびに値が異なる…なんでや…
まぁ、GetIfTable() を使った方法でよさそうかな。
ipconfig /all の結果から抽出するのが最も楽なんだけど…(笑)
Windows/ネットワークプログラミング discypus経由。
GetIfTable() を使う方法
インターフェースの一覧取得
iphlpapi.h を include して iphlpapi.lib をリンクして取得する。非アクティブなNICのMACも取得できた。MAC以外にいろいろ取得できるっぽい。
手元の環境ではなぜか搭載NIC数+1が検出されて、最後のNICはMACが 00:00:00:00:00:00 になる…と思ったら、ループバックインタフェースの情報だった。
現在のIPアドレス情報はなさげ。
データ構造体の定義は iprtrmib.h より。(コメントは追加)
typedef struct _MIB_IFROW { WCHAR wszName[MAX_INTERFACE_NAME_LEN]; // 0x00で埋まる…? DWORD dwIndex; DWORD dwType; DWORD dwMtu; DWORD dwSpeed; // リンク速度(BTのは1Mだった) DWORD dwPhysAddrLen; BYTE bPhysAddr[MAXLEN_PHYSADDR]; // MAC DWORD dwAdminStatus; DWORD dwOperStatus; DWORD dwLastChange; DWORD dwInOctets; DWORD dwInUcastPkts; DWORD dwInNUcastPkts; DWORD dwInDiscards; DWORD dwInErrors; DWORD dwInUnknownProtos; DWORD dwOutOctets; DWORD dwOutUcastPkts; DWORD dwOutNUcastPkts; DWORD dwOutDiscards; DWORD dwOutErrors; DWORD dwOutQLen; DWORD dwDescrLen; BYTE bDescr[MAXLEN_IFDESCR]; // インタフェース名 } MIB_IFROW,*PMIB_IFROW;
GetAdaptersInfo() を使う方法。
ネットワークアダプタ情報の取得(GetAdaptersInfo)
同じく iphlpapi.h を include して iphlpapi.lib をリンクする。非アクティブNICもOK。ループバックインタフェースは含まれない。
以下、構造体定義。iptypes.h より。
typedef struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO* Next; // 次の構造体定義へのポインタ DWORD ComboIndex; char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; // インタフェース名 UINT AddressLength; BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; // MAC DWORD Index; UINT Type; UINT DhcpEnabled; PIP_ADDR_STRING CurrentIpAddress; // IPアドレスっぽいけど取れなかった IP_ADDR_STRING IpAddressList; // こっちにIPアドレスが入った IP_ADDR_STRING GatewayList; IP_ADDR_STRING DhcpServer; BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained; time_t LeaseExpires; } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;最後のデータのNextはNULL
How do I get the MAC (a.k.a. hardware) address of the local Ethernet adapter? 4.7 の方法はよくわからんかった。second methodのExamples: Get MAC Address, RPC Methodだと、実行するたびに値が異なる…なんでや…
まぁ、GetIfTable() を使った方法でよさそうかな。
ipconfig /all の結果から抽出するのが最も楽なんだけど…(笑)
次のエントリ: GD::Barcode::NW7でバーコード作成 [perl]
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2013-05-02 16:12