Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> "Liczenie podsieci"
akurczyk
post
Post #1





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


Witam
Niewiem jak mam zacząć:(
Poczebuję skryptu, który podsiadająć dwie dane (adres ip i maskę podsieci), wyliczy adres pierwszego i ostatniego hosta w podsieci, adres podsieci i adres rozgłoszeniowy (ang. broadcast). Zupełnie niewiem jak mam zacząć...
Input:
  • Adres IP (ip_address) np. 122.77.188.37, 2992265511, 01010101 01010101 01010101 01010101 lub F2:10:89:20.
  • Maska podsieci (subnet_mask) np. 255.255.240.000, 3312656784, 11110101 01011111 01110111 11111110, D4:50:40:F4 lub /26.
Output:
  • Pierwszy host w podsieci w zapisie dziesiętno-kropkowym np. 177.188.166.22.
  • Pierwszy host w podzieci w zapisie dziesiętnym np. 3492247722.
  • Pierwszy host w podsieci w zapisie dwójkowym np. 10101010 10101010 10101010 10101010.
  • Pierwszy host w podsieci w zapisie szestnastkowym np. D0:50:98:02.
  • Ostatni host w podsieci w zapisie dziesiętno-kropkowym np. 177.188.166.22.
  • Ostatni host w podzieci w zapisie dziesiętnym np. 3492247722.
  • Ostatni host w podsieci w zapisie dwójkowym np. 10101010 10101010 10101010 10101010.
  • Ostatni host w podsieci w zapisie szestnastkowym np. D0:50:98:02.
  • Maska podsieci w zapisie dziesiętno-kropkowym np. 177.188.166.22.
  • Maska podsieci w zapisie dziesiętnym np. 3492247722.
  • Maska podsieci w zapisie dwójkowym np. 10101010 10101010 10101010 10101010.
  • Maska podsieci w zapisie szestnastkowym np. D0:50:98:02.
  • Liczba bajtów części sieci w adresie IP np. /27.
  • Adres podsieci w zapisie dziesiętno-kropkowym np. 177.188.166.22.
  • Adres podsieci w zapisie dziesiętnym np. 3492247722.
  • Adres podsieci w zapisie dwójkowym np. 10101010 10101010 10101010 10101010.
  • Adres podsieci w zapisie szestnastkowym np. D0:50:98:02.
  • Adres rozgłoszeniowy (ang. broadcast) w zapisie dziesiętno-kropkowym np. 177.188.166.22.
  • Adres rozgłoszeniowy (ang. broadcast) w zapisie dziesiętnym np. 3492247722.
  • Adres rozgłoszeniowy (ang. broadcast) w zapisie dwójkowym np. 10101010 10101010 10101010 10101010.
  • Adres rozgłoszeniowy (ang. broadcast) w zapisie szestnastkowym np. D0:50:98:02.
To co do tej pory napisałem, czyli nic bo niewiem jak zacząć:(
Kod
<html>
<head>
<title>NetTools</title>
</head>
<body>
<form method="post">
<table>
<tr>
<td>IP Address:</td>
<td><input type="text" name="ip_address"></td>
</tr>
<tr>
<td>Subnet mask:</td>
<td><input type="text" name="subnet_mask"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
<?php
?>
</form>
</body>
</html>

Pomocy!!!


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
kajzur
post
Post #2





Grupa: Zarejestrowani
Postów: 385
Pomógł: 26
Dołączył: 22.03.2008
Skąd: TM

Ostrzeżenie: (0%)
-----


Żeby takie rzeczy wyliczać, warto podane adresy przeliczyć na ich binarną wartość.. Jak się przelicza (swoisty algorytm) znajdziesz chyba w wikipedii, poczytaj też o operacjach and, or, i negacji..


--------------------
Zapraszam na mojego bloga. Dowiedz się jak uzyskać darmowy, zaufany certyfikat albo jak rozpoznawać głos ;)
Go to the top of the page
+Quote Post
akurczyk
post
Post #3





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


Mógłbyś mi powiedzieć lub dać linki do manuala (odpowiednie funkcje):
  • Jak sprawdzić czy dana wartosć jest w zapisie dziesiętnym, dziesiętnym (z kropkami), dwójkowym, szestnastkowym, czy jest liczbą dajtów (do 32) po sleshu??
  • Jak przekonwertować wartość z zapisu dziesiętnego, dziesiętno-kropkowanego, swójkowego, szestnastkowego, czy liczby bajtów po sleshu na wartość w zapisie dwójkowym??
  • Jak przekonwertować to z powrotem??
  • Jak obliczyć adres pierwszego hosta w podsieci (w zapisei dwójkowym)questionmark.gif
  • Jak obliczyć adres ostatniego hosta w podsieci (-||-)questionmark.gif
  • Jak obliczyć adres podsieci (-||-)questionmark.gif
  • Jak obliczyć adres rozgłoszeniowy (ang. broadcast) (również w zapisie dwójkowym)questionmark.gif
HELP_ME!!!

Ten post edytował akurczyk 8.04.2009, 18:26:45


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
kajzur
post
Post #4





Grupa: Zarejestrowani
Postów: 385
Pomógł: 26
Dołączył: 22.03.2008
Skąd: TM

Ostrzeżenie: (0%)
-----


http://php.net.pl/manual/pl/function.decbin.php

http://php.net.pl/manual/pl/function.dechex.php

http://php.net.pl/manual/pl/function.decoct.php

http://php.net.pl/manual/pl/function.bindec.php

Ogólnie przejrzyj ten link http://php.net.pl/manual/pl/ref.math.php

Co to broadcastu to masz na wikipedii: http://pl.wikipedia.org/wiki/Broadcast

Ten post edytował kajzur 8.04.2009, 18:53:57


--------------------
Zapraszam na mojego bloga. Dowiedz się jak uzyskać darmowy, zaufany certyfikat albo jak rozpoznawać głos ;)
Go to the top of the page
+Quote Post
akurczyk
post
Post #5





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


Wielkie dzięki:)
edit: A jak zamienić liczbę dziesiętną z kropkami na binarną?questionmark.gif

Ten post edytował akurczyk 8.04.2009, 20:03:21


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




explode" title="Zobacz w manualu PHP" target="_manual. Chyba nie chcesz wszystkich oktetów sumować i wtedy tworzyć z tego liczby. tongue.gif Ale jeśli tak, to str_replace" title="Zobacz w manualu PHP" target="_manual, wyrzucasz tym kropki i rzutujesz zmienną na INT, potem z górki.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
artega
post
Post #7





Grupa: Zarejestrowani
Postów: 174
Pomógł: 42
Dołączył: 22.07.2007
Skąd: /dev/random

Ostrzeżenie: (0%)
-----


  1. <?php echo decbin(ip2long('127.0.0.1')); ?>

Takie rozwiązanie wydaje się być bardziej "eleganckie" winksmiley.jpg
Go to the top of the page
+Quote Post
akurczyk
post
Post #8





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


Jak zamienić wartość binarną na CIDR (czyli ilość jedynek w zmiennej)questionmark.gif?
Skrypt w akcji: http://kklodzka.pdg.pl/konwersja.php
Kod
<html>
<head>
<title>NetTools</title>
</head>
<body>
<form method="post">
<table>
<tr>
<td align="right">IP address:</td>
<td><input type="text" name="ip_address" value="<?php echo $_POST["ip_address"];?>"></td>
</tr>
<tr>
<td align="right">Type:</td>
<td>
<select name="ip_address_type">
<option>IP</option>
<option>DEC</option>
<option>BIN</option>
</select>
</td>
</tr>
<tr>
<td align="right">Subnet mask:</td>
<td><input type="text" name="subnet_mask" value="<?php echo $_POST["subnet_mask"];?>"></td>
</tr>
<tr>
<td align="right">Type:</td>
<td>
<select name="subnet_mask_type">
<option>IP</option>
<option>CIDR</option>
<?php
//<option>DEC</option>
//<option>BIN</option>
?>
</select>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
<?php
if($_POST["ip_address_type"]=="IP"):
$ip_address=ip2long($_POST["ip_address"]);
$ip_address=decbin($ip_address);
elseif($_POST["ip_address_type"]=="DEC"):
$ip_address=decbin($_POST["ip_address"]);
elseif($_POST["ip_address_type"]=="BIN"):
$ip_address=$_POST["ip_address_type"];
endif;

if($_POST["subnet_mask_type"]=="IP"):
$subnet_mask=ip2long($_POST["subnet_mask"]);
$subnet_mask=decbin($subnet_mask);
//Jak zamienić wartość binarną na CIDR (czyli ilość jedynek w zmiennej)?questionmark.gif
elseif($_POST["subnet_mask_type"]=="CIDR"):
$subnet_mask=$_POST["subnet_mask"];
endif;

$ip_address=substr($ip_address,0,$subnet_mask);

$subnet_mask=32-$_POST["subnet_mask"];

$subnet_address=$ip_address;
for($i=0;$i<$subnet_mask;$i++):
$subnet_address=$subnet_address."0";
endfor;
$subnet_address=bindec($subnet_address);
$subnet_address=long2ip($subnet_address);

$first_host=$ip_address;
for($i=0;$i<$subnet_mask;$i++):
if($i!==$subnet_mask-1):
$first_host=$first_host."0";
else:
$first_host=$first_host."1";
endif;
endfor;
$first_host=bindec($first_host);
$first_host=long2ip($first_host);

$last_host=$ip_address;
for($i=0;$i<$subnet_mask;$i++):
if($i!==$subnet_mask-1):
$last_host=$last_host."1";
else:
$last_host=$last_host."0";
endif;
endfor;
$last_host=bindec($last_host);
$last_host=long2ip($last_host);

$broadcast=$ip_address;
for($i=0;$i<$subnet_mask;$i++):
$broadcast=$broadcast."1";
endfor;
$broadcast=bindec($broadcast);
$broadcast=long2ip($broadcast);
?>
<table>
<tr>
<td align="right">Subnet address:</td>
<td><?php echo $subnet_address;?></td>
</tr>
<tr>
<td align="right">First host:</td>
<td><?php echo $first_host;?></td>
</tr>
<tr>
<td align="right">Last host:</td>
<td><?php echo $last_host;?></td>
</tr>
<tr>
<td align="right">Broadcast:</td>
<td><?php echo $broadcast;?></td>
</tr>
</table>
</form>
</body>
</html>

POMOCY_!!!


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
#luq
post
Post #9





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Zrób sobie tablicę:
  1. <?php
  2. $cidrArr = array(
  3.        '255.255.255.255' => '/32',
  4.        '255.255.255.254' => '/31'
  5.        /*[...]*/
  6.    );
  7. ?>

A potem tylko:
  1. <?php
  2. $cidr = $cidrArr[ $stringMaski ];
  3. ?>

Chyba, że to się jakoś przelicza, bo na tym się nie znam niestety.


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
akurczyk
post
Post #10





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


Racja, zrobię tablicę ale w wersji dwójkowej. Thx

Mam problem:( Niedziała przyjmowanie adresu IP w postaci dziesiętnej:( Zamiana w odwrotną stronę działa, bo wszystko wyliczane jest na podstawie zapisu dziesiętnego adresu IP. Gdy podaję poprawny adres IP, skrypt zwraca maksymalne wartośći wszystkich zapisów.
Zrobiłem tak:
Kod
<html>
<head>
<title>Narzędzia sieciowe</title>
</head>
<body>
<form method="post">
<table>
<tr>
<td align="right">Adres IP:</td>
<td><input type="text" name="adres_ip" value="<?=$_POST["adres_ip"];?>"></td>
</tr>
<tr>
<td align="right">Zapis:</td>
<td>
<select name="zapis_adresu_ip">
<option value="2">Dwójkowy</option>
<option value="8">Ósemkowy</option>
<option value="10">Dziesiętny</option>
<option value="11">Kropkowo-dziesiętny</option>
<option value="16">Szestnastkowy</option>
</select>
</td>
</tr>
<tr>
<td align="right">Maska podsieci:</td>
<td>
<select name="maska_podsieci">
<?php
//<option value="32">255.255.255.255/32</option>
//<option value="31">255.255.255.254/31</option>
?>
<option value="30">255.255.255.252/30</option>
<option value="29">255.255.255.248/29</option>
<option value="28">255.255.255.240/28</option>
<option value="27">255.255.255.224/27</option>
<option value="26">255.255.255.192/26</option>
<option value="25">255.255.255.128/25</option>
<option value="24">255.255.255.0/24(C)</option>
<option value="23">255.255.254.0/23</option>
<option value="22">255.255.252.0/22</option>
<option value="21">255.255.248.0/21</option>
<option value="20">255.255.240.0/20</option>
<option value="19">255.255.224.0/19</option>
<option value="18">255.255.192.0/18</option>
<option value="17">255.255.128.0/17</option>
<option value="16">255.255.0.0/16(B)</option>
<option value="15">255.255.0.0/15</option>
<option value="14">255.255.0.0/14</option>
<option value="13">255.255.0.0/13</option>
<option value="12">255.255.0.0/12</option>
<option value="11">255.255.0.0/11</option>
<option value="10">255.255.0.0/10</option>
<option value="9">255.255.0.0/9</option>
<option value="8">255.0.0.0/8(A)</option>
<option value="7">254.0.0.0/7</option>
<option value="6">252.0.0.0/6</option>
<option value="5">248.0.0.0/5</option>
<option value="4">240.0.0.0/4</option>
<option value="3">224.0.0.0/3</option>
<option value="2">192.0.0.0/2</option>
<option value="1">128.0.0.0/1</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Wyślij"></td>
</tr>
</table>
<?php
if($_POST["zapis_adresu_ip"]=="2"):
$adres_ip=$_POST["adres_ip"];
elseif($_POST["zapis_adresu_ip"]=="8"):
$adres_ip=octdec($_POST["adres_ip"]);
$adres_ip=decbin($adres_ip);
elseif($_POST["zapis_adresu_ip"]=="10"):
$adres_ip=decbin($_POST["adres_ip"]);
elseif($_POST["zapis_adresu_ip"]=="11"):
$adres_ip=ip2long($_POST["adres_ip"]);
$adres_ip=decbin($adres_ip);
elseif($_POST["zapis_adresu_ip"]=="16"):
$adres_ip=hexdec($_POST["adres_ip"]);
$adres_ip=decbin($adres_ip);
endif;
$adres_ip=substr($adres_ip,0,$_POST["maska_podsieci"]);

$adres_podsieci_dwojkowo=$adres_ip;
for($i=1;$i<=32-$_POST["maska_podsieci"];$i++):
$adres_podsieci_dwojkowo=$adres_podsieci_dwojkowo."0";
endfor;
$adres_podsieci_dziesietnie=bindec($adres_podsieci_dwojkowo);
$adres_podsieci_kropkowo_dziesietnie=long2ip($adres_podsieci_dziesietnie);
$adres_podsieci_osemkowo=decoct($adres_podsieci_dziesietnie);
$adres_podsieci_szestnastkowo=dechex($adres_podsieci_dziesietnie);

$pierwszy_host_dwojkowo=$adres_ip;
for($i=1;$i<=32-$_POST["maska_podsieci"];$i++):
if($i!==32-$_POST["maska_podsieci"]):
$pierwszy_host_dwojkowo=$pierwszy_host_dwojkowo."0";
else:
$pierwszy_host_dwojkowo=$pierwszy_host_dwojkowo."1";
endif;
endfor;
$pierwszy_host_dziesietnie=bindec($pierwszy_host_dwojkowo);
$pierwszy_host_kropkowo_dziesietnie=long2ip($pierwszy_host_dziesietnie);
$pierwszy_host_osemkowo=decoct($pierwszy_host_dziesietnie);
$pierwszy_host_szestnastkowo=dechex($pierwszy_host_dziesietnie);

$ostatni_host_dwojkowo=$adres_ip;
for($i=1;$i<=32-$_POST["maska_podsieci"];$i++):
if($i!==32-$_POST["maska_podsieci"]):
$ostatni_host_dwojkowo=$ostatni_host_dwojkowo."1";
else:
$ostatni_host_dwojkowo=$ostatni_host_dwojkowo."0";
endif;
endfor;
$ostatni_host_dziesietnie=bindec($ostatni_host_dwojkowo);
$ostatni_host_kropkowo_dziesietnie=long2ip($ostatni_host_dziesietnie);
$ostatni_host_osemkowo=decoct($ostatni_host_dziesietnie);
$ostatni_host_szestnastkowo=dechex($ostatni_host_dziesietnie);

$adres_rozgloszeniowy_dwojkowo=$adres_ip;
for($i=1;$i<=32-$_POST["maska_podsieci"];$i++):
$adres_rozgloszeniowy_dwojkowo=$adres_rozgloszeniowy_dwojkowo."1";
endfor;
$adres_rozgloszeniowy_dziesietnie=bindec($adres_rozgloszeniowy_dwojkowo);
$adres_rozgloszeniowy_kropkowo_dziesietnie=long2ip($adres_rozgloszeniowy_dziesietnie);
$adres_rozgloszeniowy_osemkowo=decoct($adres_rozgloszeniowy_dziesietnie);
$adres_rozgloszeniowy_szestnastkowo=dechex($adres_rozgloszeniowy_dziesietnie);
?>
<br>
<table>
<tr>
<td align="right">Adres podsieci (Dwójkowo):</td>
<td><?=$adres_podsieci_dwojkowo;?></td>
</tr>
<tr>
<td align="right">Adres podsieci (Ósemkowo):</td>
<td><?=$adres_podsieci_osemkowo;?></td>
</tr>
<tr>
<td align="right">Adres podsieci (Dziesiętnie):</td>
<td><?=$adres_podsieci_dziesietnie;?></td>
</tr>
<tr>
<td align="right">Adres podsieci (Kropkowo-dziesiętnie):</td>
<td><?=$adres_podsieci_kropkowo_dziesietnie;?></td>
</tr>
<tr>
<td align="right">Adres podsieci (Szestnastkowo):</td>
<td><?=$adres_podsieci_szestnastkowo;?></td>
</tr>
<tr></tr>
<tr>
<td align="right">Pierwszy host (Dwójkowo):</td>
<td><?=$pierwszy_host_dwojkowo;?></td>
</tr>
<tr>
<td align="right">Pierwszy host (Ósemkowo):</td>
<td><?=$pierwszy_host_osemkowo;?></td>
</tr>
<tr>
<td align="right">Pierwszy host (Dziesiętnie):</td>
<td><?=$pierwszy_host_dziesietnie;?></td>
</tr>
<tr>
<td align="right">Pierwszy host (Kropkowo-dziesiętnie):</td>
<td><?=$pierwszy_host_kropkowo_dziesietnie;?></td>
</tr>
<tr>
<td align="right">Pierwszy host (Szestnastkowo):</td>
<td><?=$pierwszy_host_szestnastkowo;?></td>
</tr>
<tr></tr>
<tr>
<td align="right">Ostatni host (Dwójkowo):</td>
<td><?=$ostatni_host_dwojkowo;?></td>
</tr>
<tr>
<td align="right">Ostatni host (Ósenkowo):</td>
<td><?=$ostatni_host_osemkowo;?></td>
</tr>
<tr>
<td align="right">Ostatni host (Dziesiętnie):</td>
<td><?=$ostatni_host_dziesietnie;?></td>
</tr>
<tr>
<td align="right">Ostatni host (Kropkowo-dziesiętnie):</td>
<td><?=$ostatni_host_kropkowo_dziesietnie;?></td>
</tr>
<tr>
<td align="right">Ostatni host (Szestnastkowo):</td>
<td><?=$ostatni_host_szestnastkowo;?></td>
</tr>
<tr></tr>
<tr>
<td align="right">Zakres hostów:</td>
<td><?=$ostatni_host_dziesietnie-$adres_podsieci_dziesietnie;?></td>
</tr>
<tr></tr>
<tr>
<td align="right">Adres rozgłoszeniowy (Dwójkowo):</td>
<td><?=$adres_rozgloszeniowy_dwojkowo;?></td>
</tr>
<tr>
<td align="right">Adres rozgłoszeniowy (Ósemkowo):</td>
<td><?=$adres_rozgloszeniowy_osemkowo;?></td>
</tr>
<tr>
<td align="right">Adres rozgłoszeniowy (Dziesiętnie):</td>
<td><?=$adres_rozgloszeniowy_dziesietnie;?></td>
</tr>
<tr>
<td align="right">Adres rozgłoszeniowy (Kropkowo-dziesiętnie):</td>
<td><?=$adres_rozgloszeniowy_kropkowo_dziesietnie;?></td>
</tr>
<tr>
<td align="right">Adres rozgłoszeniowy (Szestnastkowo):</td>
<td><?=$adres_rozgloszeniowy_szestnastkowo;?></td>
</tr>
</table>
<br>
Created by Aleksander Kurczyk (codemaster2222(at)gmail(dot)com). All rights reserved.
</body>
</html>
<?=bindec(decbin("3232264041"));?>

Ostatnia linijka skryptu również nie działa:( tzn. zwraca maksymalną wartość (w zapisie dwójkowym czydzieści-dwie jedynki)...
HELP


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 05:19