Код: Выделить всё
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.35
192.168.1.68
192.168.201.1
192.168.201.2
192.168.201.3
192.168.201.4
если кто решал, помогите плз... а то голова вообще не варит..
Код: Выделить всё
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.35
192.168.1.68
192.168.201.1
192.168.201.2
192.168.201.3
192.168.201.4
Код: Выделить всё
#!/bin/sh
wget -q -O - http://noc.ix.net.ua/ua-list.txt | sed 's/\.0$/.0\/24/g' > /etc/ua-list.txt
for SUBNET in `ipfw table 0 list | cut -f 1 -d " " | diff /etc/ua-list.txt - | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep ">" | cut -f 2 -d " " `; do
ipfw -q table 0 delete $SUBNET
done
for SUBNET in `ipfw table 0 list | cut -f 1 -d " " | diff /etc/ua-list.txt - | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep "<" | cut -f 2 -d " " `; do
ipfw -q table 0 add $SUBNET
done
походу придётся самому делать....ProFTP писал(а):wget -q -O - http://noc.ix.net.ua/ua-list.txt
у меня список, мне нужно по нему вычислить сети, пример списка я привёл, из него мне надо получитьProFTP писал(а):Кстате, а что за айпишники, откуда ты их взял?
Код: Выделить всё
192.168.1.0/29
192.168.1.35/32
192.168.1.68/32
192.168.201.0/29
эээ... я боюсь "это" даже запускать, там очень специфический код построенный на ipfwProFTP писал(а):или это не оно?
и какой результат?ProFTP писал(а):У меня работает...
у тебя есть десять ip, которые идут подряд, чтобы их объединить нужно вычислить минимальную маску, которая бы их объединяла в подсеть... все калькуляторы это умеют просто у меня список, из него надо вычленить ип, которые идут подряд и рассчитать их маску, остальные будут ххх.ххх.ххх.ххх/32.LMik писал(а):Простите за тупость, но как можно получить сеть из IP не зная маски?
Код: Выделить всё
> ipcalc 10.0.0.0/8 -s 26 160 500 2000
Address: 10.0.0.0 00001010. 00000000.00000000.00000000
Netmask: 255.0.0.0 = 8 11111111. 00000000.00000000.00000000
Wildcard: 0.255.255.255 00000000. 11111111.11111111.11111111
=>
Network: 10.0.0.0/8 00001010. 00000000.00000000.00000000
HostMin: 10.0.0.1 00001010. 00000000.00000000.00000001
HostMax: 10.255.255.254 00001010. 11111111.11111111.11111110
Broadcast: 10.255.255.255 00001010. 11111111.11111111.11111111
Hosts/Net: 16777214 Class A, Private Internet
1. Requested size: 26 hosts
Netmask: 255.255.255.224 = 27 11111111.11111111.11111111.111 00000
Network: 10.0.11.0/27 00001010.00000000.00001011.000 00000
HostMin: 10.0.11.1 00001010.00000000.00001011.000 00001
HostMax: 10.0.11.30 00001010.00000000.00001011.000 11110
Broadcast: 10.0.11.31 00001010.00000000.00001011.000 11111
Hosts/Net: 30 Class A, Private Internet
2. Requested size: 160 hosts
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Network: 10.0.10.0/24 00001010.00000000.00001010. 00000000
HostMin: 10.0.10.1 00001010.00000000.00001010. 00000001
HostMax: 10.0.10.254 00001010.00000000.00001010. 11111110
Broadcast: 10.0.10.255 00001010.00000000.00001010. 11111111
Hosts/Net: 254 Class A, Private Internet
3. Requested size: 500 hosts
Netmask: 255.255.254.0 = 23 11111111.11111111.1111111 0.00000000
Network: 10.0.8.0/23 00001010.00000000.0000100 0.00000000
HostMin: 10.0.8.1 00001010.00000000.0000100 0.00000001
HostMax: 10.0.9.254 00001010.00000000.0000100 1.11111110
Broadcast: 10.0.9.255 00001010.00000000.0000100 1.11111111
Hosts/Net: 510 Class A, Private Internet
4. Requested size: 2000 hosts
Netmask: 255.255.248.0 = 21 11111111.11111111.11111 000.00000000
Network: 10.0.0.0/21 00001010.00000000.00000 000.00000000
HostMin: 10.0.0.1 00001010.00000000.00000 000.00000001
HostMax: 10.0.7.254 00001010.00000000.00000 111.11111110
Broadcast: 10.0.7.255 00001010.00000000.00000 111.11111111
Hosts/Net: 2046 Class A, Private Internet
Needed size: 2848 addresses.
Used network: 10.0.0.0/20
Unused:
10.0.11.32/27
10.0.11.64/26
10.0.11.128/25
10.0.12.0/22
10.0.16.0/20
10.0.32.0/19
10.0.64.0/18
10.0.128.0/17
10.1.0.0/16
10.2.0.0/15
10.4.0.0/14
10.8.0.0/13
10.16.0.0/12
10.32.0.0/11
10.64.0.0/10
10.128.0.0/9
>
Бред какой-то, с такими задачами можно всем ипам воткнуть маску 32 и не париться больше.zg писал(а):)) ipcalc уже давно освоил, но у меня конкретная задача... можно даже сказать математическая - вычисление интервалов ))) Но всё равно спасибо ))
порядок не меет значения, важно определить сети -)))LMik писал(а):Если адреса назначались по порядку, то пиши скрипт.
Код: Выделить всё
$sql = 'SET @i:=0';
$res = my_query($sql);
$sql = 'SELECT INET_NTOA(ip), ip-@i, @i:=ip FROM billing_ips WHERE segment_id=22 ORDER BY ip ASC LIMIT 40';
$res = my_query($sql);
//res_mysql2table($res); die();
class IpRange
{
var $firstIp = null;
var $lastIp = null;
var $counts = null;
var $subnet = null;
var $maskIp = null;
function calcLastIp()
{
$this->lastIp = long2ip(sprintf('%u', ip2long($this->firstIp) + $this->counts));
$this->calcMask();
}
function calcMask()
{
if ( $this->counts )
{
$maskIp = $ip1 = sprintf('%u', ip2long($this->firstIp));
$ip2 = sprintf('%u', ip2long($this->lastIp));
if ( strlen($ip1) === 10 ) $ip1 = substr($ip1, 1);
if ( strlen($ip2) === 10 ) $ip2 = substr($ip2, 1);
$ip1 = (int) $ip1;
$ip2 = (int) $ip2;
$mask = $ip1 ^ $ip2;
$mask = decbin($mask);
if ( !$mask ) $mask = '';
if ( function_exists('bcdiv') )
{
$maskIp = bcdiv($maskIp, pow(2, strlen($mask)));
$maskIp = bcmul($maskIp, pow(2, strlen($mask)));
$this->maskIp = long2ip($maskIp);
}
$this->subnet = 32 - strlen($mask);
}
else
{
$this->subnet = 32;
}
}
}
$range = null;
$nets = array();
$previp = null;
$cnt = 0;
$spread = 0;
while ( $row = mysql_fetch_row($res) )
{
list($ip, $spread) = $row;
if ( @++$k > 10000 ) die('Бесконечный цикл');
if ( $spread === '1' )
{
++ $cnt;
}
elseif ( !isset($previp) )
{
$previp = $ip;
$cnt = 0;
}
else
{
$range = new IpRange();
$range->firstIp = $previp;
$range->counts = $cnt;
$range->calcLastIp();
$nets[] = $range;
$previp = $ip;
$cnt = 0;
}
}
if ( $spread === '1' )
{
$range = new IpRange();
$range->firstIp = $previp;
$range->counts = $cnt;
$range->calcLastIp();
$nets[] = $range;
}
echo '<pre>';
print_r($nets);