Jebemci picku materinu to je z tych lahsich
fu fu este teraz to celkom nechapem ale sa k tomu blizim
nuz napriklad nam provider povie
ze mame subnetmask
255.255.255.240
a ip adresu
64.26.135.212
nuz tak najprv ideme zistit s tej zubnetmasky ze kolko je hostov a kolko sieti
1-ky su siete a 0 hosty
255 je 8 jednotiek a 240 je 11110000 (da sa si to vyratat a da sa pouzit ghex)
je to normalny prevod z desiatkovej sus do dvojkovej a naopak cize mame
11111111.11111111.11111111.11110000 i je zrejme ze jeden ceckovy subnetik mame
rozdeleny na styri siete
cize mame 0-255 moznych adries cize 256 potencionalnych IP rozdelime 4
vychadza nam 256/4 = 64
cize ideme
0 - 63 prva siet
64 - 127 druha siet
128 - 191 tretia siet
192 - 255 stvrta siet
vtipne teraz este treba vediet ze ta spodna adresa je network address a vrchna broadcast
cize prva siet
0 network
1-62 mozne masiny
63 broadcact
druha siet
64 network
65-126 mozne masiny
127 broadcast atd
cize ked sme mali adresu 64.26.135.212 a subnetmask 255.255.255.240
tak je to v stvrtej sieti a network address je
255-64 + 1 = 192
a broadcast je to posledne cize v tomto pripade jednoduche 255
IP Address 64.26.135.212
IP Netmask 255.255.255.240
Broadcast address 64.26.135.255
Network address 64.26.135.192
brano
probably B class network
IP adresa 24.114.46.3
Subnetmask 255.255.252.0
cize podla spodnej logiky
256 - 252 = 4
40, 44, 48
cize
sme snadwichovani
24.114.44
24.114.48
cize sietova adresa je
24.114.44.0
a broadcast je
24.114.47.255
skvele ipcalc potvrdil moje vypocty
prikladam ho na koniec suboru
1.2.10 IP Calculations
Let's say you have an IP Address 24.136.35.51 and a netmask 255.255.248.0. Then you have size 8 ( 256-248 = 8, or 3 bits) in the third byte. You can
infer that you are within one of the many size 8 subnets in the third byte. They will have addresses that are multiples of 8, so your job is to find which
multiples of 8 are the ones that sandwich your IP address.
Multiples of 8 are: 0, 8, 16, 24, 32, 40, 48, .... So your IP is sandwiched by 24.136.32 and 24.136.40. The first number tells you your network address -
here, it is 24.136.32.0. Subtract 1 from the other address to obtain your broadcast - here it will be 24.136.39.255.
Things are a little simpler if your netmask looks like 255.255.0.0. In this case, there is no partitioning within any of the 4 bytes. So if your IP address
was, say, 24.114.55.190, then your network address and broadcast would just be 24.114.0.0 and 24.114.255.255 respectively.
ip-calc
#!/usr/bin/perl -w
# 2/2000 krischan@jodies.cx
#
# 0.14 Release
# 0.14.1 Allow netmasks given as dotted quads
# 0.15 Colorize Classbits, Mark new bits in network
use strict;
my $version = "0.15";
my $private = "(Private Internet RFC 1918)";
my @privmin = qw (10.0.0.0 172.16.0.0 192.168.0.0);
my @privmax = qw (10.255.255.255 172.31.255.255 192.168.255.255);
my $allhosts;
my $mark_newbits = 0;
my $qcolor = "\033[34m"; # dotted quads, blue
my $ncolor = "\033[m"; # normal, black
my $bcolor = "\033[33m"; # binary, yellow
my $mcolor = "\033[31m"; # netmask, red
my $ccolor = "\033[35m"; # classbits, magenta
my $dcolor = "\033[32m"; # newbits, green
foreach (@privmin) {
$_ = &bintoint(&dqtobin("$_"));
}
foreach (@privmax) {
$_ = &bintoint(&dqtobin("$_"));
}
if (! defined ($ARGV[0])) {
&usage;
}
if (defined ($ARGV[0]) && $ARGV[0] eq "-n") {
shift @ARGV;
$qcolor = '';
$ncolor = '';
$bcolor = '';
$mcolor = '';
$ccolor = '';
$dcolor = '';
}
if (defined ($ARGV[0]) && $ARGV[0] eq "-h") {
shift @ARGV;
$qcolor = '' ;
$ncolor = '';
$bcolor = '';
$mcolor = '';
$ccolor = '';
$dcolor = '';
$private = "(Private Internet)";
print "\n";
}
my $host = "192.168.0.1";
my $mask = "24";
my $mask2 = '24';
if (defined $ARGV[0]) {
$host = $ARGV[0];
}
if (! ($host = &is_valid_dq($host)) ) {
print "$mcolor Strange value for ADDRESS ($ARGV[0])$ncolor\n";
}
if (defined $ARGV[1]) {
$mask = $ARGV[1];
if (! ($mask = is_valid_netmask($mask)) ) {
print "$mcolor Strange value for NETMASK ($ARGV[1])$ncolor\n";
}
}
if (defined ($ARGV[2])) {
$mask2 = $ARGV[2];
if (! ($mask2 = is_valid_netmask($mask2)) ) {
print "$mcolor Strange value for second NETMASK ($ARGV[2])$ncolor\n";
}
} else {
$mask2 = $mask;
}
print "\n";
print "Address: $qcolor$host$ncolor\n";
print "Address: " . &formatbin(&dqtobin($host),$mask,$bcolor,0) ."$ncolor\n";
my $m = pack( "B*",("1" x $mask) . ("0" x (32 - $mask)) );
print "Netmask: $qcolor" . &bintodq($m) . " == $mask$ncolor\n";
print "Netmask: " . &formatbin($m,$mask,$mcolor,0) . "$ncolor\n";
print "=>\n";
my $h = dqtobin($host);
my $n = $h & $m;
&printnet($n,$mask);
if ( $mask2 == $mask ) {
exit;
}
if ($mask2 > $mask) {
print "Subnets\n\n";
$mark_newbits = 1;
&subnets;
} else {
print "Supernet\n\n";
&supernet;
}
sub supernet {
$m = pack( "B*",("1" x $mask2) . ("0" x (32 - $mask2)) );
$n = $h & $m;
print "Netmask: $qcolor" . &bintodq($m) . " == $mask2$ncolor\n";
print "Netmask: " . &formatbin($m,$mask2,$mcolor,0) . "$ncolor\n\n";
&printnet($n,$mask2);
}
sub subnets {
my $subnets = 0;
my @oldnet;
my $oldnet;
my $k;
my @nr;
my $nextnet;
my $l;
$m = pack( "B*",("1" x $mask2) . ("0" x (32 - $mask2)) );
print "Netmask: $qcolor" . &bintodq($m) . " == $mask2$ncolor\n";
print "Netmask: " . &formatbin($m,$mask2,$mcolor,0) . "$ncolor\n";
print "\n";
@oldnet = split //,unpack("B*",$n);
for ($k = 0 ; $k < $mask ; $k++) {
$oldnet .= $oldnet[$k];
}
for ($k = 0 ; $k < ( 2 ** ($mask2 - $mask)) ; $k++) {
@nr = split //,unpack("b*",pack("L",$k));
$nextnet = $oldnet;
for ($l = 0; $l < ($mask2 - $mask) ; $l++) {
$nextnet .= $nr[$mask2 - $mask - $l - 1] ;
}
$n = pack "B*",$nextnet;
&printnet($n,$mask2);
++$subnets;
if ($subnets >= 1000) {
print "... stopped at 1000 subnets ...\n";
last;
}
}
if ( ($subnets < 1000) && ($mask2 > $mask) ){
print "\nSubnets: $qcolor$subnets $ncolor\n";
print "Hosts: $qcolor" . ($allhosts * $subnets) . "$ncolor\n";
}
}
sub printnet {
my ($n,$mask) = @_;
my $nm;
my $type;
my $hmin;
my $hmax;
my $hostn;
my $p;
my $i;
$m = pack( "B*",("1" x $mask) . ("0" x (32 - $mask)) );
$nm = pack( "B*",("0" x $mask) . ("1" x (32 - $mask)) );
$b = $n | $nm;
$type = 1;
while (unpack("B$type",$n) !~ /0/) {
$type++;
}
if ($type > 5) {
$type = '';
} else {
$type = "Class " . chr($type+64);
}
$hmin = pack("B*",("0"x31) . "1") | $n;
$hmax = pack("B*",("0"x $mask) . ("1" x (31 - $mask)) . "0" ) | $n;
$hostn = (2 ** (32 - $mask)) -2 ;
$p = 0;
for ($i=0; $i<3; $i++) {
if ( (&bintoint($hmax) <= $privmax[$i]) &&
(&bintoint($hmin) >= $privmin[$i]) ) {
$p = $i +1;
last;
}
}
if ($p) {
$p = $private;
} else {
$p = '';
}
print "Network: $qcolor" . &bintodq($n) . "/$mask $ncolor($ccolor" .$type. "$ncolor) $p $ncolor\n";
print "Network: " . &formatbin($n,$mask,$bcolor,1) . "$ncolor\n";
print "Broadcast: $qcolor" . &bintodq($b) . "$ncolor\n";
print "Broadcast: " . &formatbin($b,$mask,$bcolor,0) . "$ncolor\n";
print "HostMin: $qcolor" . &bintodq($hmin) . "$ncolor\n";
print "HostMin: " . &formatbin($hmin,$mask,$bcolor,0) . "$ncolor\n";
print "HostMax: $qcolor" . &bintodq($hmax) . "$ncolor\n";
print "HostMax: " . &formatbin($hmax,$mask,$bcolor,0) . "$ncolor\n";
print "Hosts: $qcolor$hostn$ncolor\n\n";
$allhosts = $hostn;
}
sub formatbin {
my ($bin,$actual_mask,$color,$mark_classbits) = @_;
my @dq;
my $dq;
my @dq2;
my $is_classbit = 1;
my $bit;
my $i;
my $j;
my $oldmask;
my $newmask;
if ($mask2 > $mask) {
$oldmask = $mask;
$newmask = $mask2;
} else {
$oldmask = $mask2;
$newmask = $mask;
}
@dq = split //,unpack("B*",$bin);
if ($mark_classbits) {
$dq = $ccolor;
} else {
$dq = $color;
}
for ($j = 0; $j < 4 ; $j++) {
for ($i = 0; $i < 8; $i++) {
if (! defined ($bit = $dq[$i+($j*8)]) ) {
$bit = '0';
}
if ( $mark_newbits &&((($j*8) + $i + 1) == ($oldmask + 1)) ) {
$dq .= "$dcolor";
}
$dq .= $bit;
if ( ($mark_classbits &&
$is_classbit && $bit == 0)) {
$dq .= $color;
$is_classbit = 0;
}
if ( (($j*8) + $i + 1) == $actual_mask ) {
$dq .= " ";
}
if ( $mark_newbits &&((($j*8) + $i + 1) == $newmask) ) {
$dq .= "$color";
}
}
push @dq2, $dq;
$dq = '';
}
return (join ".",@dq2) . $ncolor;
}
sub dqtobin {
my @dq;
my $q;
my $i;
my $bin;
foreach $q (split /\./,$_[0]) {
push @dq,$q;
}
for ($i = 0; $i < 4 ; $i++) {
if (! defined $dq[$i]) {
push @dq,0;
}
}
$bin = pack("CCCC",@dq); # 4 unsigned chars
return $bin;
}
sub bintodq {
my $dq = join ".",unpack("CCCC",$_[0]);
return $dq;
}
sub bintoint {
return unpack("N",$_[0]);
}
sub is_valid_dq {
my $value = $_[0];
my $test = $value;
my $i;
my $corrected;
$test =~ s/\.//g;
if ($test !~ /^\d+$/) {
return 0;
}
my @value = split /\./, $value, 4;
for ($i = 0; $i<4; $i++) {
if (! defined ($value[$i]) ) {
$value[$i] = 0;
}
if ( ($value[$i] !~ /^\d+$/) ||
($value[$i] < 0) ||
($value[$i] > 255) )
{
return 0;
}
}
$corrected = join ".", @value;
return $corrected;
}
sub is_valid_netmask {
my $mask = $_[0];
if ($mask =~ /^\d+$/) {
if ( ($mask > 32) || ($mask < 1) ) {
return 0;
}
} else {
if (! ($mask = &is_valid_dq($mask)) ) {
return 0;
}
$mask = dqtocidr($mask);
}
return $mask;
}
sub dqtocidr {
my $dq = $_[0];
$b = &dqtobin($dq);
my $cidr = 1;
while (unpack("B$cidr",$b) !~ /0/) {
$cidr++;
last if ($cidr == 33);
}
$cidr--;
return $cidr;
}
sub usage {
print << "EOF";
Usage: ipcalc [-n|-h] [NETMASK]
Calculates network parameters given by ADDRESS an NETMASK and displays
them as dotted quads and binary values. If a second NETMASK is provided
the resulting super- or subnets of a transition to the new netmask are
displayed. ADDRESS can be the ip-address in the network of interest or part
of the network prefix.
-n Don't display ANSI color codes
-h Display results as HTML
Example:
ipcalc 192.168.0.1 24
EOF
exit;
}