Kom ihåg mig?
Home Menu

Menu


32-bitars nummer -> IP

 
Ämnesverktyg Visningsalternativ
Oläst 2006-11-19, 17:17 #1
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
Tjenare,

Fick hjälp av er för någon månad sedan att konvertera ett IP (xxx.xxx.xxx.xxx) till ett 32-bitars tal (eller ja, jag hittade faktiskt lösningen själv :P )

Nu undrar jag hur man räknar ut motsatsen; ett numeriskt värde till en sträng (IP)?
Exempelvis talet 2130706433 ska bli "127.0.0.1"

Google har svikit mig i denna fråga...

:blink:
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-19, 17:32 #2
Svartrock Svartrock är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2004
Inlägg: 39
Svartrock Svartrock är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2004
Inlägg: 39
Function CStrIP(ByVal anNewIP)
Dim lsResults ' Results to be returned
Dim lnTemp ' Temporary value being parsed
Dim lnIndex ' Position of number being parsed
anNewIP = anNewIP + 2147483648
' Parse highest numbers first

For lnIndex = 3 To 0 Step -1
' Parse the current value for this position
lnTemp = Int(anNewIP / (256 ^ lnIndex))

' Append the number to the final results delimited by a dot
lsResults = lsResults & lnTemp & "."

' Remove the number that we just parsed
anNewIP = anNewIP - (lnTemp * (256 ^ lnIndex))
Next

' Cut off last dot
lsResults = Left(lsResults, Len(lsResults) - 1)

' Return the results
CStrIP = lsResults

End Function

Function CLngIP(ByVal asNewIP)
Dim lnResults
Dim lnIndex
Dim lnIpAry
' Split the IP address using the dot as a delimiter
lnIpAry = Split(asNewIP, ".", 4)
' Loop through each number in the IP address
For lnIndex = 0 To 3

' If we are not working with the last number...
If Not lnIndex = 3 Then

' Convert the number to a value range that can be parsed from the others
lnIpAry(lnIndex) = lnIpAry(lnIndex) * (256 ^ (3 - lnIndex))

End If

' Add the number to the results
lnResults = lnResults + lnIpAry(lnIndex)

Next
lnResults = lnResults - 2147483648
'Return the results
CLngIP = lnResults
End Function
Svartrock är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-19, 17:56 #3
nicclas nicclas är inte uppkopplad
Flitig postare
 
Reg.datum: May 2003
Inlägg: 340
nicclas nicclas är inte uppkopplad
Flitig postare
 
Reg.datum: May 2003
Inlägg: 340
Använder du PHP kan du prova med "long2ip" (och "ip2long"). Ska du spara i MySQL kan du använda INET_NTOA (och INET_ATON).
nicclas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-19, 19:18 #4
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
(jag kör c# med MsSQL)

Svartrock, tack för hjälpen, men jag ställer mig lite undrande till om CStrIP verkligen fungerar som den ska? Om jag skickar in mitt tal, 2130706433, så får jag "255.0.0.1" istället för "127.0.0.1".
Som kuriosa; om jag skickar in 0 så får jag "128.0.0.0" .... hmmm, det borde väl bli "0.0.0.0"?? Den verkar vara 127 "off" på beräkningen...

Nu har jag iofs översatt din vb kod till c# men ändringarna var minimala så jag tror inte jag har fumlat till något på vägen. :/
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-19, 20:04 #5
Svartrock Svartrock är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2004
Inlägg: 39
Svartrock Svartrock är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2004
Inlägg: 39
Koden är i classic asp och där fungerar den som den ska.

Om man använder funktionen för att konvertera 127.0.0.1 till 32-bitars så ska svaret bli -16777215.

Har använt den här koden själv i några år.

Ska labba lite med koden .net och se vad som händer
Svartrock är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-19, 23:24 #6
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
uj uj uj vad mycket kod. Bitmaska istället så blir koden upp till 4 rader lång.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-20, 09:27 #7
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
Bitmaska... hmmmm är Kullervo på humör för en liten ungefärlig demo?
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-20, 12:58 #8
vco-systemss avatar
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 774
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
vco-systemss avatar
 
Reg.datum: Dec 2004
Inlägg: 774
Detta borde fungera (Utan att kunna C#):

str=""+((tal>>24)&255)+"."+((tal>>16)&255)+"."+((t al>>8)&255)+"."+(tal&255);
vco-systems är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-20, 16:23 #9
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Citat:
Originally posted by Robert@Nov 20 2006, 09:27
Bitmaska... hmmmm är Kullervo på humör för en liten ungefärlig demo?
vco-systems gav just ett exempel. ">>" är alltså operatorn för att rotera talet bitvis åt höger och "&" är operatorn för bitvis and-operation. Precis samma syntax i PHP.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-11-20, 20:25 #10
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
Tjoho, det fungerade bra! Hade ni varit kvinnor hade ni fått en puss, nu får ni nöjja er med ett tack istället. Tack!
Robert är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 22:39.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017