Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Obliczanie dlugosci adresu IP
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Mute
Witam to moj pierwszy post i mam zawozdke w srodowisku JS

Czy jest jakas szybka mozliwosc liczenia dlugosci adresu IP ? Jest gotowa zmienna startowa i zmienna koncowa

Start ADDR:

VLAN_ADDR:

10.52.28.0

Stop ADDR:

VLAN_LAST:

10.52.29.254

Wiem ze rezultat odejmowania to 512


albo inny:

Start ADDR:

VLAN_ADDR:

10.52.64.11

Stop ADDR:

VLAN_LAST:

10.52.64.15
rezultat to 5


Ale jak sie to liczy w JS ?

Odejmwoanie dwoch IP: np



10.52.64.11 i 10.52.64.15

to bedzie 11 12 13 14 15 wiec to zezultat to: 5


albo
10.52.28.0 and 10.52.29.254

mamy 256 + 1 (bo liczymy od zera plus cala pula od 0 do 256) + 254+1 (bo liczymy od zera i 254 to jest 255 = czyli 257 + 255 = 512

Ale jak to zrobic w JS zeby on to tak fajnie bral, odejmowal ? etc?

Mozecie mi pomoc ?

pozdrawiam serdecznie,
thek
Po pierwsze to cała pula wynosi 256, bo 0-255. Nie ma adresu 10.52.28.256, czyli "dziabnąłeś" się o jeden i pełna pula adresów zawiera ich 511. A jak najprościej policzyć liczbę? Wykorzystaj fakt, że znasz adres ip i "policz różnicę wartości" obu adresów.
10.52.29.254 - 10.52.28.0 + 1 = //te +1 to dodatkowo jeden adres wynikający z racji uwzględnienia adresu odejmowanego (zawsze trzeba go dodać do puli)
10 * 256^3 + 52 * 256^2 + 29 * 256^1 + 254 * 256^0 - (10 * 256^3 + 52 * 256^2 + 28 * 256^1 + 0 * 256^0) + 1= // dwie najwyższe części się zredukują...
29 * 256 + 254 - 28 * 256 - 0 + 1 = ( 29 -28 ) * 256 + 254 + 1= 256+254+1 = 511

Tu inny przykład, z pominięciem już redukujących się części
10.52.29.0 - 10.52.28.255 + 1= (29 - 28) * 256 - 255 + 1= 256-255+1 = 2

I kolejny Twój:
10.52.64.15 - 10.52.64.11 + 1 = 15 - 11 + 1 = 5

Na skróty: przyjmijmy adresy
A.B.C.D i E.F.G.H oraz to, że pierwszy jest mniejszy od drugiego:
E.F.G.H - A.B.C.D = (E-A)*256^3 + (F-cool.gif*256^2 + (G-C)*256^1 + (H-D)*256^0 + 1(bonusowy do puli) =
(E-A)*16777216 + (F-cool.gif*65536 + (G-C)*256 + H-D + 1

Sprawdzamy?
10.52.29.254 - 10.52.28.0
(10-10)*16777216 + (52-52)*65536 + (29-28)*256 + 254-0 + 1 = 1*256 + 254 + 1 = 511 smile.gif

10.52.29.0 - 10.52.28.255
(10-10)*16777216 + (52-52)*65536 + (29-28)*256 + 0-255 + 1 = 1*256 - 255 + 1 = 2 smile.gif

Ludzie... Nauczcie się matematyki i algorytmy trochę pisać bo inaczej kiepsko widzę pokolenie przyszłych informatyków. Jeszcze trochę i dojdzie do sytuacji, że 40-letni programista będzie więcej wart niż kilkunastu 20-letnich :/
Mute
Dzieki za odpowiedz.

Ale jak to ugryżć w javie script. Zakladajac ze te IP dajemy jako stringi....


Kod
function countIP(startIP,endIP){
var d1=Number(endIP.split('.')[2])-Number(startIP.split('.')[2]);
var d2=Number(endIP.split('.')[3])-Number(startIP.split('.')[3])+1;
var n=d1*256+d1+d2;
return n;
}


Wywala mi NaN
thek
Któryś z elementów tablicy startIP lub endIP zawiera coś więcej niż tylko cyferki... Byś zerknął do manuala to byś się dowiedział, że NaN wyskakuje gdy Number() dostaje jako parametr choćby głupią spację.
[JAVASCRIPT] pobierz, plaintext
  1. var test1= new String("999"); // wyświetlenie da 999
  2. var test2= new String("999 888");//wyświetlenie wywali NaN
[JAVASCRIPT] pobierz, plaintext
Mute
Witam


Analizowalem ta kalkulacja i mam pytanie. Czy aby liczyc ALE W ZAKRESIE 1 do 254 nalezy mnozyc * 254 ?

np:

10.52.0.15 - 10.52.0.4

(10 * 254^3 + 52 * 254^2 + 0 * 254^1 + 15 * 254^0) - 10 * 254^3 + 52 * 254^2 + 0 * 254^1 + 4 * 254^0 +1 questionmark.gif


10.52.93.254 - 10.52.92.1

(10 * 254^3 + 52 * 254^2 + 93 * 254^1 + 254 * 254^0) - 10 * 254^3 + 52 * 254^2 + 92 * 254^1 + 1 * 254^0 +1 questionmark.gif

i tez +1 na koncu ?

Ta kalkulacja obejmuje od 0 do 255
A co jesli trzeba liczyc od 1 do 254 ?

Prosze o pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.