Eerst wat context: ik heb enkele honderden servers verspreid over een grote geografische zone en in een paar duizenden subnetten. Ik schrijf een script dat vanalles doet, maar één onderdeel ervan is op netwerkniveau en niet mijn specialiteit: kijken in welk subnet een gegeven IP adres zit.
Ik heb bijvoorbeeld 10.141.0.0/20. Ik zou dit kunnen uitrekenen, ttz. expanden naar een array met alle IP adressen die daarin zitten (10.141.0.1 tem. 10.141.15.254) en kijken of mijn IP adres daarin zit. Alleen: dat is een ontzettend inefficiënte manier, aangezien ik voor elke CIDR x-aantal elementen creëer en mijn loops ontzettend groot maak. Wat je namelijk zou krijgen is iets als volgt in dummycode:
Drie loops achter elkaar is verschrikkelijk inefficiënt. En die hele loop moet gebeuren voor honderden IP adressen! Waarschijnlijk is er een andere methode om dit te berekenen op binair niveau, maar op dit uur slaag ik er niet meer in om zelf het algoritme te vinden waarmee ik eenvoudig uitvis of, laat ons zeggen, 10.141.15.4 een onderdeel van 10.141.0.0/20 is of niet.
Dank alvast voor jullie input.
(Edit: in werkelijkheid moet ik ongeveer 300 IP adressen opzoeken in iets van een 4000 verschillende subnetten).
Ik heb bijvoorbeeld 10.141.0.0/20. Ik zou dit kunnen uitrekenen, ttz. expanden naar een array met alle IP adressen die daarin zitten (10.141.0.1 tem. 10.141.15.254) en kijken of mijn IP adres daarin zit. Alleen: dat is een ontzettend inefficiënte manier, aangezien ik voor elke CIDR x-aantal elementen creëer en mijn loops ontzettend groot maak. Wat je namelijk zou krijgen is iets als volgt in dummycode:
C#:
1
2
3
4
5
6
7
8
9
10
11
| ForEach ($Site in Sites) { ForEach ($Subnet in $Site.Subnets) { #een hoop code om te expanden die we in een array $arrIPAddress steken ForEach ($objIPAddress in $arrIPAddress) { $IPAddress -EQ $HetIngevoerdeIPAdres } } } |
Drie loops achter elkaar is verschrikkelijk inefficiënt. En die hele loop moet gebeuren voor honderden IP adressen! Waarschijnlijk is er een andere methode om dit te berekenen op binair niveau, maar op dit uur slaag ik er niet meer in om zelf het algoritme te vinden waarmee ik eenvoudig uitvis of, laat ons zeggen, 10.141.15.4 een onderdeel van 10.141.0.0/20 is of niet.
Dank alvast voor jullie input.
(Edit: in werkelijkheid moet ik ongeveer 300 IP adressen opzoeken in iets van een 4000 verschillende subnetten).
[ Voor 10% gewijzigd door YellowOnline op 08-03-2012 14:59 ]