IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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.

Aktivity
Avatar
dejma
Člen
Avatar
dejma:16.11.2020 9:39

Našel jsem si několik tutoriálů a všelijakých kódů, kterou jsou "vyhřezlé" a jelikož nevím, kam je vložit a jak je používat, jsem v pasti neznalosti. např. https://docs.microsoft.com/…onfiguration
odkazuje na pěkný example, ale jsem zaseknutý už zde:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
// nebo using Microsoft.Management.Infrastructure;


namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
        }


        static void oldSchoolQueryInstanceFunc() {
            ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
        }
    }

}

: error CS0246: Typ nebo název oboru názvů ObjectQuery se nenašel. (Nechybí direktiva using nebo odkaz na sestavení?)

Poradíte někdo prosím, co mi chybí udělat, abych mohl použivat ObjectQuery
Co je to odkaz sestavení?

Děkuji všem za nakopnutí

Zkusil jsem: Umím zjistit lokální list IP adresy přes

using System.Net;

IPAddress[] hostIPs = Dns.GetHostAddresses(host);

, neumím a nedaří se mi zijistit Gateway, DHCP server, ideálně vše, co je v ipconfig /all, route print

Chci docílit: Jsem nováček a dle zdejších tutoriálů se snažím udělat aplikaci, která bude hlídat spuštění/vypnutí služby OpenVPN
Cílem je, aby program zajistil start OpenVPN služby když klient není na pracovní síti a opačně, vypnutí VPN v pracovní síti.

Pracovní síť poznám podle IP adresy DHCP serveru 192.168.xxx.1, DNS 192.168.1.237, 8.8.8.8, DHCP flag domain. firma.local
Pokud má klienty tyto parametry, jak je vpn služba Stop, jinak start

V powershellu to není problém, to mám hotové a slouží to dobře v cyklu naplánované úlohy. Vymyslel jsem si, že chci trayikonu zelenou/červenou, která bude zobrazovat status služby OpenVPN - jako zpětná vazba stavu, a tudíž bych to celé chtěl nakódovat v c# WinForm aplikaci - kvůli té tray status ikoně. Taková příležitost naučit se ...

 
Odpovědět
16.11.2020 9:39
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na dejma
Tadeáš Burda :16.11.2020 10:21

mas nainstalovany nuget System.Managment??? Nuget

Editováno 16.11.2020 10:23
 
Nahoru Odpovědět
16.11.2020 10:21
Avatar
dejma
Člen
Avatar
dejma:16.11.2020 12:00

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.NullRe­ferenceExcepti­on: 'Odkaz na objekt není nastaven na instanci objektu.'
System.Manage­ment.Managemen­tBaseObject.this[strin­g].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

 
Nahoru Odpovědět
16.11.2020 12:00
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na dejma
Tadeáš Burda :16.11.2020 12:55

No nuget mas, kedzeti ide using System.Manage­ment;... 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

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
16.11.2020 12:55
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na dejma
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

 
Nahoru Odpovědět
16.11.2020 12:57
Avatar
dejma
Člen
Avatar
dejma:16.11.2020 14:32

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ě?

 
Nahoru Odpovědět
16.11.2020 14:32
Avatar
dejma
Člen
Avatar
dejma:16.11.2020 15:59

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();
        }
    }
}
 
Nahoru Odpovědět
16.11.2020 15:59
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.