Diskuze: C# Zjištění IP informací o připojení k síti
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Tadeáš Burda :16.11.2020 10:21
mas nainstalovany nuget System.Managment??? Nuget
ahoj, nuget nemám, ale třeba to někomu pomůže toto:
poznámka: jsem 20 let bouchač neobjektových prasáren v PHP a ve světě
c# jsem totální zero lama, prosím o shovívavost k mé natvrdlosti
něco co je pro vás evidentní je pro mě problém na půl dne gůglení
dotaz nuget je reference?
dnes jsem ještě našel WMI tutorial
https://nathondalton.wordpress.com/…mi-tutorial/
a tam je, že se musí přidat Reference "Add reference" Assemblies = a tam jsou
ty System.* "věci"
české Visual studio a český hlášky + tutoriály v angličtině jsou pro
mě nesrozumitelný peklo
Ale posusnul jsem se o pro mě velký skok
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
oldSchoolQueryInstanceFunc();
}
static void oldSchoolQueryInstanceFunc()
{
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
Console.WriteLine("Index : {0}", m["Index"]);
Console.WriteLine("Description : {0}", m["Description"]);
Console.WriteLine("DHCPEnabled : {0}", m["DHCPEnabled"]);
Console.WriteLine("DHCPServer : {0}", m["DHCPServer"]);
Console.WriteLine("DNSDomain : {0}", m["DNSDomain"]);
Console.WriteLine("MACAddress : {0}", m["MACAddress"]);
Console.WriteLine();
}
Console.ReadLine();
}
}
}
toto vrací:
Index : 6
description : Realtek PCIe GbE Family Controller
dhcpenabled : False
dhcpserver :
dnsdomain :
macaddress : 84:A9:3E:05:4C:C6
Index : 7
description : Intel(R) Dual Band Wireless-AC 8265
dhcpenabled : True
dhcpserver : 192.168.1.1
dnsdomain : firma.local
macaddress : 30:24:32:DA:5F:16
Index : 8
description : Realtek USB GbE Family Controller
dhcpenabled : True
dhcpserver :
dnsdomain :
macaddress :
Index : 9
description : Microsoft Wi-Fi Direct Virtual Adapter
dhcpenabled : True
dhcpserver :
dnsdomain :
macaddress : 30:24:32:DA:5F:17
Teď bojuji jak udělat
if(m["dnsdomain"] == "firma.local")
abych si vyndal proměnný ze správný sítovky - ta co má dnsdomain "firma.local"
když ve foreach cyklu udělám proměnou
foreach (ManagementObject m in queryCollection)
{
string dnsdomain = m["dnsdomain"].ToString();
}
tak to bohužel havaruje pro mě nesrozumitelnou hláškou
System.NullReferenceException: 'Odkaz na objekt není nastaven na
instanci objektu.'
System.Management.ManagementBaseObject.this[string].get
takže o radost z vypsané domény jsem přišel, protože s tím neumím
pracovat uf, bojuji dál
Tadeáš Burda :16.11.2020 12:55
No nuget mas, kedzeti ide using System.Management;... A ktemu erroru: Mas tam napisane ze ti to vraca null protoze tńic pod takym klucem tam neni...JE to proto ze ti si pitas "dnsdomain" ale kluc je ""DNSDomain""...Musis dodrzavat velke/male pismena
+20 Zkušeností
+2,50 Kč

Tadeáš Burda :16.11.2020 12:57
Ten nuget je proste len ta knihovna System.Management, nemnel si ju stahnutu proto hlaska: Typ nebo název oboru názvů ObjectQuery se nenašel, lebo VS nevedelo odkat ma cerpat
děkuji za pomoc
ještě bojuji s visual studio CTRL+U vše malé, a když chci odkomentovat blok
ctrl+k+u a zapomenu na K, tak se mi to vše krásně podělá => vše na
malá písmena a k tomu ještě mám v rukách klávesový zkratky z
notepad++
problém s NULL jsem vyřešil podmínkou
if (m["DNSDomain"] != null) {
string dnsdomain = m["DNSDomain"].ToString();
}
To už nehavaruje a konečně mam proměnou s dnsdomain
posunul jsem se zase o kousek dál, už mi to ukazuje dost informací,
akorát IP adres může být více a jsou schované asi v poli
Nevím jak to poznat, tuším dle závorek []. Jak poznat, co je schované v
m["IPAddress[]"] ? zkoušel jsem to vyčíst s breakpointu v debug, nenašel
jsem to tam - hledám blbě?
V php bych napsal var_dump(m)
zkoušel jsem
List<string> ipList = new List<string>();
foreach (ManagementObject m in queryCollection)
{
foreach (string ip in m["IPAddress[]"])
{
Console.WriteLine("IP : {0}", ip);
}
// nebo jak do listu ipList vložit obsah m["IPAddress[]"] ?
}
poslední error je právě ve druhým foreach
Error CS1579 foreach statement cannot operate on variables of type 'object'
because 'object' does not contain a public instance or extension definition for
'GetEnumerator'
jestli jsem to dobře pochopil, tak nemůžu volat GetEnumerator...
vytvořil jsem si
List<string> ipList = new List<string>();
a do něj bych chtěl dát m["IPAddress[]"]
a ty IP si někde mimo hlavní foreach prohlédnout, ale nevím jak na to
poradíte ještě?
tak zde je výsledek mého snažení, získat ip paramtery na aktivní siťovce
díky, problém byl, že neumím zacházet s proměnnýma
snad to pomůže i někomu jinému
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
oldSchoolQueryInstanceFunc();
}
static void oldSchoolQueryInstanceFunc()
{
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
if (m["DNSDomain"] != null) {
string[] ipaddresses = (string[])m["IPAddress"];
foreach (string ipaddr in ipaddresses)
Console.WriteLine("IPAddresa : {0}", ipaddr);
string[] ipgwaddresses = (string[])m["DefaultIPGateway"];
foreach (string ipgwaddr in ipgwaddresses)
Console.WriteLine("DefaultIPGateway : {0}", ipgwaddr);
UInt16[] gwmetric = (UInt16[])m["GatewayCostMetric"];
foreach (UInt16 metric in gwmetric)
Console.WriteLine("GatewayCostMetric : {0}", metric);
string[] ipsubnet = (string[])m["IPSubnet"];
foreach (string subnet in ipsubnet)
Console.WriteLine("IPSubnet : {0}", subnet);
string dnsdomain = m["DNSDomain"].ToString();
Console.WriteLine("DNSDomain : {0}", dnsdomain);
Console.WriteLine("Index : {0}", m["Index"]);
Console.WriteLine("Description : {0}", m["Description"]);
Console.WriteLine("DHCPEnabled : {0}", m["DHCPEnabled"]);
Console.WriteLine("DHCPServer : {0}", m["DHCPServer"]);
Console.WriteLine("MACAddress : {0}", m["MACAddress"]);
Console.WriteLine("Caption : {0}", m["Caption"]);
Console.WriteLine("Description : {0}", m["Description"]) ;
Console.WriteLine("SettingID : {0}", m["SettingID"]);
Console.WriteLine("ArpAlwaysSourceRoute : {0}", m["ArpAlwaysSourceRoute"]);
Console.WriteLine("ArpUseEtherSNAP : {0}", m["ArpUseEtherSNAP"]);
Console.WriteLine("DatabasePath : {0}", m["DatabasePath"]);
Console.WriteLine("DeadGWDetectEnabled : {0}", m["DeadGWDetectEnabled"]);
Console.WriteLine("DefaultTOS : {0}", m["DefaultTOS"]);
Console.WriteLine("DefaultTTL : {0}", m["DefaultTTL"]);
Console.WriteLine("DHCPEnabled : {0}", m["DHCPEnabled"]);
Console.WriteLine("DHCPLeaseExpires : {0}", m["DHCPLeaseExpires"]);
Console.WriteLine("DHCPLeaseObtained : {0}", m["DHCPLeaseObtained"]);
Console.WriteLine("DHCPServer : {0}", m["DHCPServer"]);
Console.WriteLine("DNSDomain : {0}", m["DNSDomain"]);
Console.WriteLine("DNSEnabledForWINSResolution : {0}", m["DNSEnabledForWINSResolution"]);
Console.WriteLine("DNSHostName : {0}", m["DNSHostName"]);
Console.WriteLine("DomainDNSRegistrationEnabled : {0}", m["DomainDNSRegistrationEnabled"]);
Console.WriteLine("ForwardBufferMemory : {0}", m["ForwardBufferMemory"]);
Console.WriteLine("FullDNSRegistrationEnabled : {0}", m["FullDNSRegistrationEnabled"]);
Console.WriteLine("IGMPLevel : {0}", m["IGMPLevel"]);
Console.WriteLine("Index : {0}", m["Index"]);
Console.WriteLine("InterfaceIndex : {0}", m["InterfaceIndex"]);
Console.WriteLine("IPConnectionMetric : {0}", m["IPConnectionMetric"]);
Console.WriteLine("IPEnabled : {0}", m["IPEnabled"]);
Console.WriteLine("IPFilterSecurityEnabled : {0}", m["IPFilterSecurityEnabled"]);
Console.WriteLine("IPPortSecurityEnabled : {0}", m["IPPortSecurityEnabled"]);
Console.WriteLine("IPUseZeroBroadcast : {0}", m["IPUseZeroBroadcast"]);
Console.WriteLine("IPXAddress : {0}", m["IPXAddress"]);
Console.WriteLine("IPXEnabled : {0}", m["IPXEnabled"]);
Console.WriteLine("IPXMediaType : {0}", m["IPXMediaType"]);
Console.WriteLine("IPXVirtualNetNumber : {0}", m["IPXVirtualNetNumber"]);
Console.WriteLine("KeepAliveInterval : {0}", m["KeepAliveInterval"]);
Console.WriteLine("KeepAliveTime : {0}", m["KeepAliveTime"]);
Console.WriteLine("MACAddress : {0}", m["MACAddress"]);
Console.WriteLine("MTU : {0}", m["MTU"]);
Console.WriteLine("NumForwardPackets : {0}", m["NumForwardPackets"]);
Console.WriteLine("PMTUBHDetectEnabled : {0}", m["PMTUBHDetectEnabled"]);
Console.WriteLine("PMTUDiscoveryEnabled : {0}", m["PMTUDiscoveryEnabled"]);
Console.WriteLine("ServiceName : {0}", m["ServiceName"]);
Console.WriteLine("TcpipNetbiosOptions : {0}", m["TcpipNetbiosOptions"]);
Console.WriteLine("TcpMaxConnectRetransmissions : {0}", m["TcpMaxConnectRetransmissions"]);
Console.WriteLine("TcpNumConnections : {0}", m["TcpNumConnections"]);
Console.WriteLine("TcpUseRFC1122UrgentPointer : {0}", m["TcpUseRFC1122UrgentPointer"]);
Console.WriteLine("TcpWindowSize : {0}", m["TcpWindowSize"]);
Console.WriteLine("WINSEnableLMHostsLookup : {0}", m["WINSEnableLMHostsLookup"]);
Console.WriteLine("WINSHostLookupFile : {0}", m["WINSHostLookupFile"]);
Console.WriteLine("WINSPrimaryServer : {0}", m["WINSPrimaryServer"]);
Console.WriteLine("WINSScopeID : {0}", m["WINSScopeID"]);
Console.WriteLine("WINSSecondaryServer : {0}", m["WINSSecondaryServer"]);
Console.WriteLine();
}
}
Console.ReadLine();
}
}
}
Zobrazeno 8 zpráv z 8.