JOINing based on whether an IP address is contained within a CIDR range?
Hi,
I am storing a log of HTTP requests in a database table (including IP address):
http_log: id(PK), path, time, ip
I have another table that contains CIDR ranges and names for them:
network_names: id(PK), cidr, name
Some example data for both tables:
network_names:
1,
192.168.0.0/24, 'Engineering'
2,
192.168.1.0/24, 'Media'
3,
192.168.2.0/24, 'Engineering'
4,
192.168.3.0/24, 'Accounting'
5,
192.168.4.0/24, 'Engineering'
6,
10.0.0.0/8, 'Engineering'
http_log:
1, '/index.html', 110000001,
192.168.0.47/32
2, '/index.html', 110000023,
200.1.2.3/32
3, '/index.html', 110000059,
1.2.3.4/32
4, '/index.html', 110000232,
192.168.2.1/32
5, '/index.html', 113919102,
192.168.1.39/32
6, '/index.html', 129101293,
10.2.2.4/32
7, '/index.html', 132828282,
192.168.4.2/32
Now, in trying to produce a report on this data, I've come up against an interesting (to me at least!) problem..
I basically want the same output as in http_log, but substituting the IP with the network name where available,
i.e:
1, '/index.html', 110000001, Engineering
2, '/index.html', 110000023,
200.1.2.3/32
3, '/index.html', 110000059,
1.2.3.4/32
4, '/index.html', 110000232, Engineering
5, '/index.html', 113919102, Media
6, '/index.html', 129101293, Engineering
7, '/index.html', 132828282, Engineering
I'm wondering what the best way of doing this is (considering that http_log could have >100000 rows) Is it possible to somehow JOIN using the <<= and >>= network operators? Or would I have to iterate the network_names table manually with LOOP (or something) on every row of the http_log?
If anyone can share some advice, that would be great!
Thanks,
JST
Home |
Main Index |
Thread Index