Portál AbcLinuxu, 9. listopadu 2025 05:02
#!/bin/bash
function ip2long(){
local IP="${1:?Missing ip in $FUNCNAME}"
local IP_SUM=0
local COUNT=3
for i in `echo "$IP"|sed 's:\.: :g'`; do
let IP_SUM+=$(($i<<($COUNT*8)))
let COUNT--
done
echo "$IP_SUM"
}
function najdiCZIP(){
ret="N"
long=`ip2long $1`
ipzac=`echo $1|cut -d. -f1`
if [ -n `cat tt.txt|grep +$ipzac+` ]
then
for k in `cat rozsahy.txt`
do
start=`echo $k|cut -c1-10`
stop=`echo $k|cut -c11-20`
#echo "$start $long $stop"
if [ $long -ge $start ] && [ $long -le $stop ]
then
ret="C"
break
fi
done
fi
echo $ret
}
najdiCZIP $1
#!/usr/bin/env python
import socket, struct, sys
def ascii_ip_ton(ascii_quad):
return struct.unpack('!L',socket.inet_aton(ascii_quad))[0]
tested_ip_a = sys.argv[1]
tested_ip = ascii_ip_ton(tested_ip_a)
for pair in file('site.txt'):
pair = pair.strip()
network_a, mask_a = pair.split('/')
network = ascii_ip_ton(network_a)
mask = ascii_ip_ton(mask_a)
if tested_ip & mask == network:
print tested_ip_a, 'belongs to', pair
Za sekundu zvládne zkontrolovat příslušnost ke 100 000 sítím. Ani trochu jsem se nesnažil to optimalizovat. Kdyby to bylo pořád málo, je zde možnost kešovat IP adresy převedené do numerického formátu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.