OrangeGardenRoom

技術系のメモ

【C#】ネットワークアダプタを扱うクラスのメモ

ネットワークアダプタを扱うにあたり、ほしい情報に対して、どれも微妙に足りない。

複数のクラスを組み合わせる必要がありそう。

幸い結合条件にできる値が、DeviceID、名前など複数あるので、別クラスを使っても大丈夫そう。

 

ネットワークアダプタ設定ツールを作りにあたり利用。

各クラスごとに、ツールを作るに当たり、個人的に足りなかったことのメモ。

 

 


【NetworkInterface】

https://learn.microsoft.com/ja-jp/dotnet/api/system.net.networkinformation.networkinterface?view=net-8.0

インタフェースの一般的なものはあらかた取得可能。

使い方が簡単で、取得できる値も必要分ばかりでわかりやすい。

ただ、無効化されているアダプタは取得対象外

これが痛い。無効化されていても、一覧として取得はしたい。

こちらの取得対象は、ネットワーク接続(ncpa.cpl)の一覧に出てくるもので、ダイアルアップ接続以外のもののみが出てくる。

 

NetworkInterface[] nicList = NetworkInterface.GetAllNetworkInterfaces();

foreach (NetworkInterface nic in nicList)
{

      string interfacename = nic.Name     

}

 

 

 


【Win32_NetworkAdapterConfiguration】

https://learn.microsoft.com/ja-jp/windows/win32/cimwin32prov/win32-networkadapterconfiguration

WMIを用いたデータの取得方法。

ほとんどのデータが取得でき、無効化されたアダプタも取得できる。

WAN miniportとかもでる。

リンクアップしているかどうかの判別はできないが、接続時にしか表示されない値があるのでそれをキーにすれば行ける……と思う。

インタフェース名(イーサネットとかWi-Fi)が取得できない。

ipconfigとかnetshのコマンドを裏で使っているので、別クラスを使ってそれだけ取得が必要。

 

string sql = “SELECT * FROM Win32_NetworkAdapterConfiguration”;

ManagementObjectSearcher s = new ManagementObjectSearcher(sql);

ManagementObjectCollection nacList = s.Get();

string MacAddress = nacList[“MacAddress”];

 

 

 


【MSFT_NetAdapter】

https://learn.microsoft.com/ja-jp/previous-versions/windows/desktop/legacy/hh968170(v=vs.85)

色々取得できるもの。

Win32_NetworkAdapterが非推奨で、代わりにこれを使えと言われている。

ほぼ全部取得ができる。これを使えば、これ1つで全部取得できそう。

日本語の情報がとても少ない。。。

 

PowerShellでたたくときは、-Namescope指定が必要。

このコマンドで出ない環境では使えないかも。

あんまりよくないけどイーサネットの出力全部書いときます。

 

PS C:\WINDOWS\system32> Get-WmiObject MSFT_NetAdapter -Namespace root\StandardCimv2

__GENUS : 2
__CLASS : MSFT_NetAdapter
__SUPERCLASS : CIM_NetworkPort
__DYNASTY : CIM_ManagedElement
__RELPATH : MSFT_NetAdapter.CreationClassName=”MSFT_NetAdapter”,DeviceID=”{08848
F29-0E26-4943-92C8-CD6D76F983B0}”,SystemCreationClassName=”CIM_Netwo
rkPort”,SystemName=”Strawberry”
__PROPERTY_COUNT : 103
__DERIVATION : {CIM_NetworkPort, CIM_LogicalPort, CIM_LogicalDevice, CIM_EnabledLog
icalElement…}
__SERVER : STRAWBERRY
__NAMESPACE : root\StandardCimv2
__PATH : \\STRAWBERRY\root\StandardCimv2:MSFT_NetAdapter.CreationClassName=”M
SFT_NetAdapter”,DeviceID=”{08848F29-0E26-4943-92C8-CD6D76F983B0}”,Sy
stemCreationClassName=”CIM_NetworkPort”,SystemName=”Strawberry”
ActiveMaximumTransmissionUnit : 1500
AdditionalAvailability :
AdminLocked : False
AutoSense :
Availability :
AvailableRequestedStates :
Caption :
CommunicationStatus :
ComponentID : pci\ven_8086&dev_153a&subsys_05a41028
ConnectorPresent : True
CreationClassName : MSFT_NetAdapter
Description :
DetailedStatus :
DeviceID : {08848F29-0E26-4943-92C8-CD6D76F983B0}
DeviceName : \Device\{08848F29-0E26-4943-92C8-CD6D76F983B0}
DeviceWakeUpEnable : True
DriverDate : 2015-08-04
DriverDateData : 130831200000000000
DriverDescription : Intel(R) Ethernet Connection I217-LM
DriverMajorNdisVersion : 6
DriverMinorNdisVersion : 50
DriverName : \SystemRoot\system32\DRIVERS\e1d65x64.sys
DriverProvider : Intel
DriverVersionString : 12.13.17.4
ElementName :
EnabledDefault : 2
EnabledState : 5
EndPointInterface : False
ErrorCleared :
ErrorDescription :
FullDuplex : True
HardwareInterface : True
HealthState :
Hidden : False
HigherLayerInterfaceIndices : {26}
IdentifyingDescriptions :
IMFilter : False
InstallDate :
InstanceID : {08848F29-0E26-4943-92C8-CD6D76F983B0}
InterfaceAdminStatus : 1
InterfaceDescription : Intel(R) Ethernet Connection I217-LM
InterfaceGuid : {08848F29-0E26-4943-92C8-CD6D76F983B0}
InterfaceIndex : 4
InterfaceName : ethernet_32769
InterfaceOperationalStatus : 1
InterfaceType : 6
iSCSIInterface : False
LastErrorCode :
LinkTechnology :
LowerLayerInterfaceIndices :
MajorDriverVersion : 12
MaxQuiesceTime :
MaxSpeed :
MediaConnectState : 1
MediaDuplexState : 2
MinorDriverVersion : 13
MtuSize : 1500
Name : イーサネット
NdisMedium : 0
NdisPhysicalMedium : 14
NetLuid : 1689399632855040
NetLuidIndex : 32769
NetworkAddresses : {F8B156A57BF3}
NotUserRemovable : False
OperatingStatus :
OperationalStatus :
OperationalStatusDownDefaultPortNotAuthenticated : False
OperationalStatusDownInterfacePaused : False
OperationalStatusDownLowPowerState : False
OperationalStatusDownMediaDisconnected : False
OtherEnabledState :
OtherIdentifyingInfo :
OtherLinkTechnology :
OtherNetworkPortType :
OtherPortType :
PermanentAddress : F8B156A57BF3
PnPDeviceID : PCI\VEN_8086&DEV_153A&SUBSYS_05A41028&REV_04\3&11583659&0&C8
PortNumber : 0
PortType :
PowerManagementCapabilities :
PowerManagementSupported :
PowerOnHours :
PrimaryStatus :
PromiscuousMode : False
ReceiveLinkSpeed : 1000000000
RequestedSpeed :
RequestedState : 12
Speed : 1000000000
State : 2
Status :
StatusDescriptions :
StatusInfo :
SupportedMaximumTransmissionUnit :
SystemCreationClassName : CIM_NetworkPort
SystemName : Strawberry
TimeOfLastStateChange :
TotalPowerOnHours :
TransitioningToState : 12
TransmitLinkSpeed : 1000000000
UsageRestriction :
Virtual : False
VlanID :
WdmInterface : False
PSComputerName : STRAWBERRY

 

 

※記述例(Visual Studioでいれて動くの確認済)

ManagementScope scope = new ManagementScope(“root\\StandardCimv2”);

ObjectQuery query = new ObjectQuery(“SELECT * FROM MSFT_NetAdapter”);

ManagementObjectSearcher s = new ManagementObjectSearcher(scope, query);

ManagementObjectCollection nacList = s.Get();

foreach (ManagementObject nac in nacList) {

        string MacAddress = nac[“MacAddress”];

}

==================================================================

 

※記述例(書いてあったの写しただけでわからない)

ManagementClass MSFTClass = new ManagementClass(“\\\\.\\ROOT\\StandardCimv2:MSFT_NetAdapter”);

foreach (ManagementObject MsftObj in MSFTClass.GetInstances())

{

      string name = MsftObj[“Name”];

}

 

 

 


【Win32_NetworkAdapter】

https://learn.microsoft.com/ja-jp/windows/win32/cimwin32prov/win32-networkadapter

非推奨の項目。MSFT_NetAdapterを代わりに使えと書いてある。

NetworkAdapterConfigurationがないものがあるから使えるかとおもったら、なぜかIPアドレスが取得できない。。。

NetConnectionIDでアダプタ名取得できるとおもったら全然できないダメ。

 

PowerShellでたたいてみるとこんな感じ。

PS C:\WINDOWS\system32> Get-WmiObject Win32_NetworkAdapter


ServiceName : kdnic
MACAddress :
AdapterType :
DeviceID : 0
Name : Microsoft Kernel Debug Network Adapter
NetworkAddresses :
Speed :

ServiceName : e1dexpress
MACAddress : F8:B1:56:XX:XX:XX
AdapterType : イーサネット 802.3
DeviceID : 1
Name : Intel(R) Ethernet Connection I217-LM
NetworkAddresses :
Speed : 1000000000

 

7項目しかないでござる。

さすが非推奨。

 

※C#記述例

string sql = “SELECT * FROM Win32_NetworkAdapter”;

ManagementObjectSearcher p = new ManagementObjectSearcher(sql);

ManagementObjectCollection nacList = p.Get();

foreach (ManagementObject nac in nacList) {

        string MacAddress = nac[“MacAddress”];

}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です