Avatar billede spif2001 Nybegynder
26. juni 2006 - 20:00 Der er 30 kommentarer og
1 løsning

Få fat i lokale IP adresser

Følgende kode giver mig de lokale IP adresser på den lokale PC:

IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
            this.listBox.Items.Add("Local IP addresses:");
            foreach (IPAddress adr in hostEntry.AddressList)
                this.listBox.Items.Add(adr.ToString());

Men hvad skal jeg gøre for at få alle IP adresser på det lokale netværk?
Evt. bare de IP adresser der er registreret på nærmeste router / switch.
Avatar billede arne_v Ekspert
26. juni 2006 - 20:02 #1
Det er vist en ret umulig opgave.

Min bedste ide er at pinge alle mulige adresser sog saa definere at dem som svarer
er dem som er der.
Avatar billede heine112 Nybegynder
26. juni 2006 - 20:07 #2
ja, du skal pinge på det netværk, som du vil undersøge - det kan hurtigt blive et stort arbejde hvis nettet ikke er 192.168.1.* lignende...
Avatar billede spif2001 Nybegynder
26. juni 2006 - 20:08 #3
hæhæ - joo.

Men nu er jeg ikke IP ekspert. Hvilke adresser skal jeg pinge efter?

Hvis vi siger at min adresse er: 125.125.125.1, er det så nok at gennemsøge 125.125.125.* eller skal man længere ud; a la 125.125.*.*?
Avatar billede arne_v Ekspert
26. juni 2006 - 20:17 #4
afhaenger af net masken
Avatar billede heine112 Nybegynder
26. juni 2006 - 20:20 #5
Hvis din adresse er 10.0.0.188 - så er nettet 10.*.*.*.  Her er der så cirka 256^3 adresser du skal scanne.

Hvis din adresse er 192.168.1.88, skal scanne 192.168.1.*.Her er der kun 255 adresser.

Der forskellige lokale netværk, hvor de 2 ovenstående er eksempler. Adressen 125.125.125.1 er ikke på et lokalt netværk.
Avatar billede heine112 Nybegynder
26. juni 2006 - 20:24 #6
Avatar billede spif2001 Nybegynder
26. juni 2006 - 20:54 #7
tror jeg kan "nøjes" med de to sidste - har 3 enheder der alle starter med de samme 2 første.

Smid et svar begge to for en deler.
Avatar billede heine112 Nybegynder
26. juni 2006 - 20:55 #8
Jeg samler ikke
Avatar billede spif2001 Nybegynder
26. juni 2006 - 20:57 #9
ok - arne tager puljen - han samler da vidts lidt så vidt jeg kan se ;)
Avatar billede arne_v Ekspert
26. juni 2006 - 20:58 #10
du behoever ikke tro - du kan vide

brug ipconfig kommandoen

hvis din subnet mask er 255.255.255.0 saa beheover du kun at process fra .1 til .254
Avatar billede arne_v Ekspert
26. juni 2006 - 20:59 #11
det er korrekt - jeg samler

:-)
Avatar billede hmortensen Nybegynder
26. juni 2006 - 21:00 #12
På nogle switche og routere er det muligt at hente en liste over klienter tilsluttet. Skal det virke generalt, eller op med specifikt udstyr?
Avatar billede spif2001 Nybegynder
26. juni 2006 - 21:03 #13
arne -> subnet er 255.255.224.0 - vil det virke også?

hmortensen -> det er godt nok specifikt - en Motorola SBG900 Wireless Surfboard Gateway, men har slet ikke styr over API til den.
Avatar billede arne_v Ekspert
26. juni 2006 - 21:08 #14
saa skal du gennem 8292 mulige noder (8190 hvis man traekker de 2 i enderne fra)
Avatar billede spif2001 Nybegynder
26. juni 2006 - 21:19 #15
dvs 255.255.224.1-254, 255.255.225.1-254 indtil 255.255.255.1-254 ?
Avatar billede arne_v Ekspert
26. juni 2006 - 21:19 #16
nej - jeg prover lige at bixe et C# program
Avatar billede hmortensen Nybegynder
26. juni 2006 - 21:21 #17
Arne, .NET versionen har vel sin relevans så, da 2.0 har Ping klasse.
Avatar billede arne_v Ekspert
26. juni 2006 - 21:38 #18
using System;
using System.Net;

namespace E
{
    public class MainClass
    {
        public static void PrintAllAddresses(string ip, string mask)
        {
            byte[] iptmp = IPAddress.Parse(ip).GetAddressBytes();
            Array.Reverse(iptmp);
            int ip2 = BitConverter.ToInt32(iptmp, 0);
            byte[] masktmp = IPAddress.Parse(mask).GetAddressBytes();
            Array.Reverse(masktmp);
            int mask2 = BitConverter.ToInt32(masktmp, 0);
            int start = (ip2 & mask2) + 1;
            int end = ip2 | (~mask2) - 1;
            for(int i = start; i <= end; i++)
            {
                byte[] tmp = BitConverter.GetBytes(i);
                Array.Reverse(tmp);
                IPAddress adr = IPAddress.Parse(tmp[0] + "." + tmp[1] + "." + tmp[2] + "." + tmp[3]);
                Console.WriteLine(adr);
            }
        }
        public static void Main(string[] args)
        {
            PrintAllAddresses("192.168.1.10", "255.255.255.0");
        }
    }
}
Avatar billede arne_v Ekspert
26. juni 2006 - 21:38 #19
ikke koent, men jeg tror at det virker
Avatar billede arne_v Ekspert
26. juni 2006 - 21:39 #20
hmortensen>

IP adresse manipulationen er vist uafhaengig af .NET version

ping er indbygget i .NET 2.x

i .NET 1.x kan man bruge noget Win32 API - jeg har vist noget kode liggende og flyde
Avatar billede spif2001 Nybegynder
26. juni 2006 - 21:48 #21
Hvis jeg kalder den sådan her:

PrintAllAddresses("212.10.33.41", "255.255.224.0");

så får jeg 8191 adresser - så er det bare at pinge. :)
Avatar billede arne_v Ekspert
26. juni 2006 - 21:56 #22
(ser adresserne rigtige ude ?)

jep

og som hmortensen fik bragt paa bane saa er ping noget nemmere i .NET 2.x
Avatar billede spif2001 Nybegynder
26. juni 2006 - 22:11 #23
ja de ser fine ud, men pyyh det tager lang tid at pinge dem alle....
Avatar billede arne_v Ekspert
26. juni 2006 - 22:13 #24
multithreaded !!
Avatar billede spif2001 Nybegynder
26. juni 2006 - 22:14 #25
ja - har sat den i gang synkront - nu får den lov at køre færdig.
Avatar billede heine112 Nybegynder
26. juni 2006 - 22:26 #26
Har du mulighed for at bruge linux ? nmap (www.insecure.org) er et godt tool. Man kan iøvrigt ikke regne med, at man kan pinge computere.
Avatar billede spif2001 Nybegynder
26. juni 2006 - 22:55 #27
har ikke linux - kun windåse.

Anyway døde den synkront ;) - så hver Ping fik sin egen tråd - det tog 47 sek. at løbe igennem, men den finder alt alt for mange.

1095 to be exact.
Avatar billede spif2001 Nybegynder
26. juni 2006 - 22:56 #28
Har jeg pinget hele den lokale Stofa afdeling?
Avatar billede spif2001 Nybegynder
26. juni 2006 - 22:58 #29
Ping kode - mest taget fra MSDN:

Ping pingSender = new Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 120;
IPAddress adr = this.allAddresses[Convert.ToInt32(Thread.CurrentThread.Name)];
PingReply reply = pingSender.Send(adr, timeout, buffer, options);
if (reply.Status == IPStatus.Success)
    this.AddToAddressList(adr.ToString());
Avatar billede arne_v Ekspert
26. juni 2006 - 23:10 #30
Hvis Stofa kabelnet er bridget, saa har du nok taget hele kvarterets
computere med.
Avatar billede spif2001 Nybegynder
26. juni 2006 - 23:17 #31
ok - tak for hjælpen - fedter lidt mere med det og så i seng - godnat :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester