The opinions expressed herein are my own personal opinions. They are not necessarily fact or sactioned by any other person or organization. If you disagree that's your right. It's also my right to not care.
© Copyright 2008, Chris Tacke
Smart Device Framework 2.2 refactored a lot of our network interface classes. Yes, it's likely to casue some angst with people that used the older stuff, but it really is for the best. I never liked the older mechanism that exposed things like SSID for network interfaces that weren't even wireless. The new model is much friendlier and object-oriented. Here's a quick (and very thorough) example of how to use the new classes. As you can see, there's *nothing* to be known about the interface that isn't exposed.
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); WirelessZeroConfigNetworkInterface wzcInterface = null;foreach (NetworkInterface ni in interfaces){ Debug.WriteLine(string.Format("===========\r\nInterface {0}\r\n===========", ni.Id)); Debug.WriteLine(string.Format(" Type: {0}", ni.GetType().Name)); Debug.WriteLine(string.Format(" Name: {0}", ni.Name)); Debug.WriteLine(string.Format(" Description: {0}", ni.Description)); Debug.WriteLine(string.Format(" Network Interface Type: {0}", ni.NetworkInterfaceType.ToString())); PhysicalAddress address = ni.GetPhysicalAddress(); Debug.WriteLine(string.Format(" MAC: {0}", address == null ? "{none}" : address.ToString())); Debug.WriteLine(string.Format(" Operational Status: {0}", ni.OperationalStatus.ToString())); Debug.WriteLine(string.Format(" Speed: {0}bps", ni.Speed)); Debug.WriteLine(string.Format(" *Interface Operational Status: {0}", ni.InterfaceOperationalStatus.ToString())); Debug.WriteLine(string.Format(" *Current IP: {0}", ni.CurrentIpAddress.ToString())); Debug.WriteLine(string.Format(" *Current Subnet: {0}", ni.CurrentSubnetMask.ToString())); IPInterfaceProperties ipProps = ni.GetIPProperties(); Debug.WriteLine("\r\n IP Properties\r\n -------------");#region --- Server Lists --- if (ipProps.DhcpServerAddresses.Count > 0) { for (int i = 0; i < ipProps.DhcpServerAddresses.Count; i++) { Debug.WriteLine(string.Format(" DHCP Server {0}: {1}", i, ipProps.DhcpServerAddresses[i].ToString())); } } else { Debug.WriteLine(" No DHCP Servers"); } if (ipProps.DnsAddresses.Count > 0) { for (int i = 0; i < ipProps.DnsAddresses.Count; i++) { Debug.WriteLine(string.Format(" DNS Server {0}: {1}", i, ipProps.DnsAddresses[i].ToString())); } } else { Debug.WriteLine(" No DNS Servers"); } if (ipProps.GatewayAddresses.Count > 0) { for (int i = 0; i < ipProps.GatewayAddresses.Count; i++) { Debug.WriteLine(string.Format(" Gateway {0}: {1}", i, ipProps.GatewayAddresses[i].Address.ToString())); } } else { Debug.WriteLine(" No Gateways"); } if (ipProps.WinsServersAddresses.Count > 0) { for (int i = 0; i < ipProps.WinsServersAddresses.Count; i++) { Debug.WriteLine(string.Format(" WINS Server {0}: {1}", i, ipProps.WinsServersAddresses[i].ToString())); } } else { Debug.WriteLine(" No WINS Servers"); }#endregion#region --- Unicast Addresses --- if (ipProps.UnicastAddresses.Count > 0) { for (int i = 0; i < ipProps.UnicastAddresses.Count; i++) { Debug.WriteLine(string.Format(" Unicast address {0}: {1}", i, ipProps.UnicastAddresses[i].Address.ToString())); Debug.WriteLine(string.Format(" Address Family: {0}", ipProps.UnicastAddresses[i].Address.AddressFamily)); if (ipProps.UnicastAddresses[i].Address.AddressFamily == AddressFamily.InterNetworkV6) { Debug.WriteLine(string.Format(" Scope ID: {0}", ipProps.UnicastAddresses[i].Address.ScopeId)); } else // ipv4 { Debug.WriteLine(string.Format(" IPv4 Mask: {0}", ipProps.UnicastAddresses[i].IPv4Mask == null ? "{none}" : ipProps.UnicastAddresses[i].IPv4Mask.ToString())); } Debug.WriteLine(string.Format(" Preferred Limetime: {0}", ipProps.UnicastAddresses[i].AddressPreferredLifetime)); Debug.WriteLine(string.Format(" Valid Limetime: {0}", ipProps.UnicastAddresses[i].AddressValidLifetime)); Debug.WriteLine(string.Format(" DHCP Lease Limetime: {0}", ipProps.UnicastAddresses[i].DhcpLeaseLifetime)); Debug.WriteLine(string.Format(" DAD State: {0}", ipProps.UnicastAddresses[i].DuplicateAddressDetectionState)); Debug.WriteLine(string.Format(" {0} DNS Eligible", ipProps.UnicastAddresses[i].IsDnsEligible ? "IS" : "IS NOT")); Debug.WriteLine(string.Format(" {0} Transient", ipProps.UnicastAddresses[i].IsTransient ? "IS" : "IS NOT")); Debug.WriteLine(string.Format(" Prefix Origin: {0}", ipProps.UnicastAddresses[i].PrefixOrigin.ToString())); Debug.WriteLine(string.Format(" Suffix Origin: {0}", ipProps.UnicastAddresses[i].SuffixOrigin.ToString())); } } else { Debug.WriteLine(" No Unicast addresses"); }#endregion#region --- Anycast Addresses --- if (ipProps.AnycastAddresses.Count > 0) { for (int i = 0; i < ipProps.AnycastAddresses.Count; i++) { Debug.WriteLine(string.Format(" Anycast address {0}: {1}", i, ipProps.AnycastAddresses[i].Address.ToString())); Debug.WriteLine(string.Format(" Address Family: {0}", ipProps.AnycastAddresses[i].Address.AddressFamily)); if (ipProps.AnycastAddresses[i].Address.AddressFamily == AddressFamily.InterNetworkV6) { Debug.WriteLine(string.Format(" Scope ID: {0}", ipProps.AnycastAddresses[i].Address.ScopeId)); } Debug.WriteLine(string.Format(" {0} DNS Eligible", ipProps.UnicastAddresses[i].IsDnsEligible ? "IS" : "IS NOT")); Debug.WriteLine(string.Format(" {0} Transient", ipProps.UnicastAddresses[i].IsTransient ? "IS" : "IS NOT")); } } else { Debug.WriteLine(" No Anycast addresses"); }#endregion#region --- Multicast Addresses --- if (ipProps.MulticastAddresses.Count > 0) { for (int i = 0; i < ipProps.MulticastAddresses.Count; i++) { Debug.WriteLine(string.Format(" Anycast address {0}: {1}", i, ipProps.MulticastAddresses[i].Address.ToString())); Debug.WriteLine(string.Format(" Address Family: {0}", ipProps.MulticastAddresses[i].Address.AddressFamily)); if (ipProps.MulticastAddresses[i].Address.AddressFamily == AddressFamily.InterNetworkV6) { Debug.WriteLine(string.Format(" Scope ID: {0}", ipProps.MulticastAddresses[i].Address.ScopeId)); } Debug.WriteLine(string.Format(" {0} DNS Eligible", ipProps.MulticastAddresses[i].IsDnsEligible ? "IS" : "IS NOT")); Debug.WriteLine(string.Format(" {0} Transient", ipProps.MulticastAddresses[i].IsTransient ? "IS" : "IS NOT")); } } else { Debug.WriteLine(" No Multicast addresses"); }#endregion#region --- IPv4 Stats --- IPv4InterfaceStatistics ipstats = ni.GetIPv4Statistics(); Debug.WriteLine("\r\n IPv4 Statistics\r\n -------------"); Debug.WriteLine(string.Format(" Bytes Received: {0}", ipstats.BytesReceived)); Debug.WriteLine(string.Format(" Bytes Sent: {0}", ipstats.BytesSent)); Debug.WriteLine(string.Format(" Incoming Packets Discarded: {0}", ipstats.IncomingPacketsDiscarded)); Debug.WriteLine(string.Format(" Incoming Packets with errors: {0}", ipstats.IncomingPacketsWithErrors)); Debug.WriteLine(string.Format(" Incoming Packets Unk. Protocol: {0}", ipstats.IncomingUnknownProtocolPackets)); Debug.WriteLine(string.Format(" Non Unicast Packets Received: {0}", ipstats.NonUnicastPacketsReceived)); Debug.WriteLine(string.Format(" Non Unicast Packets Sent: {0}", ipstats.NonUnicastPacketsSent)); Debug.WriteLine(string.Format(" Outgoing Packets Discarded: {0}", ipstats.OutgoingPacketsDiscarded)); Debug.WriteLine(string.Format(" Outgoing Packets With Errors: {0}", ipstats.OutgoingPacketsWithErrors)); Debug.WriteLine(string.Format(" Output Queue Length: {0}", ipstats.OutputQueueLength)); Debug.WriteLine(string.Format(" Unicast Packets Received: {0}", ipstats.UnicastPacketsReceived)); Debug.WriteLine(string.Format(" Unicast Packets Sent: {0}", ipstats.UnicastPacketsSent));#endregion#region --- IPv4 Properties --- IPv4InterfaceProperties ipv4props = ipProps.GetIPv4Properties(); Debug.WriteLine("\r\n IPv4 Properties\r\n -------------"); Debug.WriteLine(string.Format(" Index: {0}", ipv4props.Index)); Debug.WriteLine(string.Format(" Auto Addressing {0}", ipv4props.IsAutomaticPrivateAddressingActive ? "ACTIVE" : "INACTIVE")); Debug.WriteLine(string.Format(" Auto Addressing {0}", ipv4props.IsAutomaticPrivateAddressingEnabled ? "ENABLED" : "DISABLED")); Debug.WriteLine(string.Format(" DHCP {0}", ipv4props.IsDhcpEnabled ? "ENABLED" : "DISABLED")); Debug.WriteLine(string.Format(" MTU: {0}", ipv4props.Mtu)); Debug.WriteLine(string.Format(" {0} use WINS", ipv4props.UsesWins ? "DOES" : "DOES NOT"));#endregion if (ni is WirelessZeroConfigNetworkInterface) { WirelessZeroConfigNetworkInterface wzc = (WirelessZeroConfigNetworkInterface)ni; // save for later operations wzcInterface = wzc; Debug.WriteLine("\r\n *WZC Properties\r\n -------------"); Debug.WriteLine(string.Format(" *Associated AP: {0}", wzc.AssociatedAccessPoint)); Debug.WriteLine(string.Format(" *Associated AP MAC: {0}", wzc.AssociatedAccessPointMAC)); Debug.WriteLine(string.Format(" *Authentication Mode: {0}", wzc.AuthenticationMode.ToString())); Debug.WriteLine(string.Format(" *WZC Fallback Enabled: {0}", wzc.FallbackEnabled)); Debug.WriteLine(string.Format(" *WEP Status: {0}", wzc.WEPStatus)); Debug.WriteLine(string.Format(" *Signal Strength: {0}db ({1})", wzc.SignalStrength.Decibels, wzc.SignalStrength.Strength.ToString())); Debug.WriteLine(string.Format(" *Authentication Mode: {0}", wzc.AuthenticationMode.ToString())); Debug.WriteLine(string.Format(" *Infrastructure Mode: {0}", wzc.InfrastructureMode.ToString())); Debug.WriteLine(string.Format(" *WEP Status: {0}", wzc.WEPStatus.ToString())); foreach (int rate in wzc.SupportedRates) { Debug.WriteLine(string.Format(" *Supports {0}kbps", rate)); } Debug.WriteLine(string.Format(" *Radio ATIM Window: {0}Kµsec", wzc.RadioConfiguration.ATIMWindow)); Debug.WriteLine(string.Format(" *Radio beacon Period: {0}Kµsec", wzc.RadioConfiguration.BeaconPeriod)); Debug.WriteLine(string.Format(" *Radio Frequency: {0}kHz", wzc.RadioConfiguration.Frequency)); Debug.WriteLine(string.Format(" *Radio Frequency Hop Dwell Time: {0}Kµsec", wzc.RadioConfiguration.FrequencyHopDwellTime)); Debug.WriteLine(string.Format(" *Radio Frequency Hop Pattern: {0}", wzc.RadioConfiguration.FrequencyHopPattern)); Debug.WriteLine(string.Format(" *Radio Frequency Hop Set: {0}", wzc.RadioConfiguration.FrequencyHopSet));#region --- Preferred APs --- if (wzc.PreferredAccessPoints.Count > 0) { Debug.WriteLine("\r\n *Preferred APs\r\n -------------"); foreach (AccessPoint ap in wzc.PreferredAccessPoints) { Debug.WriteLine(string.Format(" *SSID: {0}", ap.Name)); Debug.WriteLine(string.Format(" *MAC {0}", ap.PhysicalAddress.ToString())); Debug.WriteLine(string.Format(" *Mode {0}", ap.InfrastructureMode.ToString())); Debug.WriteLine(string.Format(" *Network Type {0}", ap.NetworkTypeInUse.ToString())); Debug.WriteLine(string.Format(" *Privacy {0}", ap.Privacy)); Debug.WriteLine(string.Format(" *Signal Strength: {0}db ({1})", ap.SignalStrength.Decibels, ap.SignalStrength.Strength.ToString())); // supported rates foreach (int rate in ap.SupportedRates) { Debug.WriteLine(string.Format(" *Supports {0}kbps", rate)); } } } else { Debug.WriteLine("\r\n *No Preferred APs"); }#endregion#region --- Nearby APs --- if (wzc.NearbyAccessPoints.Count > 0) { Debug.WriteLine("\r\n *Nearby APs\r\n -------------"); foreach (AccessPoint ap in wzc.NearbyAccessPoints) { Debug.WriteLine(string.Format(" *SSID: {0}", ap.Name)); Debug.WriteLine(string.Format(" *MAC {0}", ap.PhysicalAddress.ToString())); Debug.WriteLine(string.Format(" *Mode {0}", ap.InfrastructureMode.ToString())); Debug.WriteLine(string.Format(" *Network Type {0}", ap.NetworkTypeInUse.ToString())); Debug.WriteLine(string.Format(" *Privacy {0}", ap.Privacy)); Debug.WriteLine(string.Format(" *Signal Strength: {0}db ({1})", ap.SignalStrength.Decibels, ap.SignalStrength.Strength.ToString())); // supported rates foreach (int rate in ap.SupportedRates) { Debug.WriteLine(string.Format(" *Supports {0}kbps", rate)); } } } else { Debug.WriteLine("\r\n *No Nearby APs"); }#endregion#region --- Preferred APs --- if (wzc.NearbyPreferredAccessPoints.Count > 0) { Debug.WriteLine("\r\n *Preferred Nearby APs\r\n -------------"); foreach (AccessPoint ap in wzc.NearbyPreferredAccessPoints) { Debug.WriteLine(string.Format(" *SSID: {0}", ap.Name)); Debug.WriteLine(string.Format(" *MAC {0}", ap.PhysicalAddress.ToString())); Debug.WriteLine(string.Format(" *Mode {0}", ap.InfrastructureMode.ToString())); Debug.WriteLine(string.Format(" *Network Type {0}", ap.NetworkTypeInUse.ToString())); Debug.WriteLine(string.Format(" *Privacy {0}", ap.Privacy)); Debug.WriteLine(string.Format(" *Signal Strength: {0}db ({1})", ap.SignalStrength.Decibels, ap.SignalStrength.Strength.ToString())); // supported rates foreach (int rate in ap.SupportedRates) { Debug.WriteLine(string.Format(" *Supports {0}kbps", rate)); } } } else { Debug.WriteLine("\r\n *No Nearby Preferred APs"); }#endregion } else if (ni is WirelessNetworkInterface) { WirelessNetworkInterface wni = (WirelessNetworkInterface)ni; Debug.WriteLine("\r\n *Wireless Properties\r\n -------------"); Debug.WriteLine(string.Format(" *Associated AP: {0}", wni.AssociatedAccessPoint)); Debug.WriteLine(string.Format(" *Associated AP MAC: {0}", wni.AssociatedAccessPointMAC)); Debug.WriteLine(string.Format(" *Signal Strength: {0}db ({1})", wni.SignalStrength.Decibels, wni.SignalStrength.Strength.ToString())); Debug.WriteLine(string.Format(" *Authentication Mode: {0}", wni.AuthenticationMode.ToString())); Debug.WriteLine(string.Format(" *Infrastructure Mode: {0}", wni.InfrastructureMode.ToString())); Debug.WriteLine(string.Format(" *WEP Status: {0}", wni.WEPStatus.ToString())); foreach (int rate in wni.SupportedRates) { Debug.WriteLine(string.Format(" *Supports {0}kbps", rate)); } Debug.WriteLine(string.Format(" *Radio ATIM Window: {0}Kµsec", wni.RadioConfiguration.ATIMWindow)); Debug.WriteLine(string.Format(" *Radio beacon Period: {0}Kµsec", wni.RadioConfiguration.BeaconPeriod)); Debug.WriteLine(string.Format(" *Radio Frequency: {0}kHz", wni.RadioConfiguration.Frequency)); Debug.WriteLine(string.Format(" *Radio Frequency Hop Dwell Time: {0}Kµsec", wni.RadioConfiguration.FrequencyHopDwellTime)); Debug.WriteLine(string.Format(" *Radio Frequency Hop Pattern: {0}", wni.RadioConfiguration.FrequencyHopPattern)); Debug.WriteLine(string.Format(" *Radio Frequency Hop Set: {0}", wni.RadioConfiguration.FrequencyHopSet)); } } // foreach (NetworkInterface ni in interfaces)if (wzcInterface != null){ byte[] key = null; bool b = wzcInterface.AddPreferredNetwork("MyOpenNetwork1", true, key, 1, AuthenticationMode.Open, WEPStatus.WEPDisabled, null); b = wzcInterface.AddPreferredNetwork("MyOpenNetwork2", true, key, 1, AuthenticationMode.Open, WEPStatus.WEPDisabled, null); b = wzcInterface.AddPreferredNetwork("MyOpenNetwork3", true, key, 1, AuthenticationMode.Open, WEPStatus.WEPDisabled, null);}
Remember Me