Avatar billede hmortensen Nybegynder
07. september 2005 - 08:13 Der er 15 kommentarer og
1 løsning

IP til decimal, og tilbage igen

Hejsa

Hvordan kan jeg lave en IP om til decimal, og tilbage igen, så det er muligt at gennemløbe vha. en løkke?

Mvh.
H. Mortensen
Avatar billede arne_v Ekspert
07. september 2005 - 08:16 #1
prøv:

IPAddress.Parse("123.123.123.123").GetAddressBytes()
Avatar billede hmortensen Nybegynder
07. september 2005 - 08:35 #2
Hvordan kan jeg bruge den ?

Så vidt jeg kan se, får jeg et array med de 4 okteller.
Avatar billede arne_v Ekspert
07. september 2005 - 08:37 #3
ja

var det ikke det som du mente med at lave en IP om til decimal ?
Avatar billede hmortensen Nybegynder
07. september 2005 - 08:40 #4
Jeg forsøger at gennemløbe alle IP'er fra en given start til slut.
Fx. 111.222.333.1 - 111.222.334.255

Jeg har så forsøgt mig med denne formel, som omregner til et decimal tal, hvor okX er de 4 okteller. Den giver mig et tal der stiger med én, når IP'en stiger med én.
(ok1 * (256 ^ 3)) + (ok2 * (256 ^ 2)) + (ok3 * 256) + ok4
Avatar billede arne_v Ekspert
07. september 2005 - 09:00 #5
den obsolete IPAddress .Address returnerer denne værdi
Avatar billede arne_v Ekspert
07. september 2005 - 09:01 #6
men kan du ikke bare tælle op i de 4 oktetter ?

(du skal selvfølgelig huske mente !)
Avatar billede hmortensen Nybegynder
07. september 2005 - 09:08 #7
Jo, men der må vel findes en formel til at regne den anden vej ?

I fx. php er der en metode til det (long2ip), så det kan lade sig gøre.
Avatar billede arne_v Ekspert
07. september 2005 - 09:11 #8
du mener som

ok4 = ip % 256;
ok3 = (ip / 256) % 256;
ok2 = (ip / (256*256)) % 256;
ok1 = ip / (256*256*256);
Avatar billede arne_v Ekspert
07. september 2005 - 09:11 #9
[shift og mask er sikkert hurigere men ...]
Avatar billede hmortensen Nybegynder
07. september 2005 - 09:24 #10
Jo, det ser meget rigtig ud.
Du må gerne ligge et svar.
Avatar billede ksoren Nybegynder
07. september 2005 - 09:24 #11
En løsning uden alle de beregninger kunne være

IPAddress ip_start = IPAddress.Parse("1.1.1.1");
IPAddress ip_slut = IPAddress.Parse("1.1.2.3");

while(ip_start.Address != ip_slut.Address)
{
    ip_start.Address = IPAddress.HostToNetworkOrder(1+IPAddress.NetworkToHostOrder((int)ip_start.Address));
    Console.WriteLine(ip_start);
}
Avatar billede ksoren Nybegynder
07. september 2005 - 10:07 #12
hm der er givetvis nok et carry bit problem i den løsning
Avatar billede arne_v Ekspert
07. september 2005 - 20:11 #13
svar
Avatar billede arne_v Ekspert
07. september 2005 - 20:24 #14
den kode skal vist rettes en del til

            IPAddress ip_start = IPAddress.Parse("1.1.1.1");
            IPAddress ip_slut = IPAddress.Parse("1.1.2.3");
            IPAddress ip = ip_start;
            while(IPAddress.NetworkToHostOrder((int)ip.Address) <= IPAddress.NetworkToHostOrder((int)ip_slut.Address))
            {
                Console.WriteLine(ip);
                ip.Address = IPAddress.HostToNetworkOrder(IPAddress.NetworkToHostOrder((int)ip.Address)+1);
            }

men .Address er som sagt obsoletr

kald det en IPv6 readiness feature
Avatar billede hmortensen Nybegynder
08. september 2005 - 07:14 #15
Hvad menes med:
.Address er obsolete
Avatar billede arne_v Ekspert
08. september 2005 - 07:45 #16
at Microsoft fraråder brugen af den
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