次のエントリ: 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はNULLHow 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
