Hej mitt dilemma är följande, jag vill skapa en funktion som tar emot två ipadresser samt en subnätmask och sedan jämför ipadresserna mot subnätmasken för att se om de är i samma subnät. <b>bool svar=subnetCheck(010000100007,010000101007,255255254000);</b> Blev lite fel där. <b>Kom fram till att man förmodligen kan använda operatorn << för att översätta ipadressen?</b>&-operatorn för att jämföra om ip-adresser är i samma subnät.
Problemet är att programmet inte fungerar som det borde göra.
Jag får endast svar om att ip-adresserna är i olika subnät. Enda gången svaret är att de är i samma subnät är om de är exakt samma ip-adresser.
C++ koden:
#include <iostream.h>
#include <conio.h>
bool subnetCheck(unsigned IP_ADDRESS_1, unsigned IP_ADDRESS_2, unsigned SUBNET_MASK);
void main(void){
bool svar=subnetCheck(010000100007,010000101007,255255254000);
cout << svar << endl;
if (svar==1)
cout << "IP-adresserna \204r i samma subn\204t" << flush;
else
cout << "IP-adresserna \204r inte i samma subn\204t" << flush;
getche();
}
bool subnetCheck(const unsigned int IP_ADDRESS_1, const unsigned int IP_ADDRESS_2, const unsigned int SUBNET_MASK){
if ((IP_ADDRESS_1 & SUBNET_MASK) == (IP_ADDRESS_2 & SUBNET_MASK)) //BITvis and jämförelse
return true;
else
return false;
}Sv: &-operatorn för att jämföra om ip-adresser är i samma subnät.
Om funktionen skall fungera får du se till att göra korrekta översättningar av IP-adresserna till heltal:
10.0.100.7 --> 10 * pow(256, 3) + 0 * pow(256, 2) + 100 * pow(256, 1) + 7 * pow(256, 0) = 167797767
255.255.254.0 --> 4294966784Sv: &-operatorn för att jämföra om ip-adresser är i samma subnät.
Hur som helst så fungerar applikationen utmärkt med din hjälp. Tackar.
Kom fram till att man förmodligen kan använda operatorn << för att översätta ipadressen?
Koden (fungerar):
#include <iostream.h>
#include <conio.h>
#include <math.h>
bool subnetCheck(unsigned IP_ADDRESS_1, unsigned IP_ADDRESS_2, unsigned SUBNET_MASK);
void main(void){
int IP_ADDRESS_1 = 10 * pow(256, 3) + 0 * pow(256, 2) + 100 * pow(256, 1) + 7 * pow(256, 0);
int IP_ADDRESS_2 = 10 * pow(256, 3) + 0 * pow(256, 2) + 101 * pow(256, 1) + 7 * pow(256, 0);
int SUBNET_MASK = 255 * pow(256, 3) + 255 * pow(256, 2) + 255 * pow(256, 1) + 0 * pow(256, 0);
bool svar=subnetCheck(IP_ADDRESS_1,IP_ADDRESS_2,SUBNET_MASK);
cout << svar << endl;
if (svar)
cout << "IP-adresserna \204r i samma subn\204t" << flush;
else
cout << "IP-adresserna \204r inte i samma subn\204t" << flush;
getche();
}
bool subnetCheck(const unsigned int IP_ADDRESS_1, const unsigned int IP_ADDRESS_2, const unsigned int SUBNET_MASK){
if ((IP_ADDRESS_1 & SUBNET_MASK) == (IP_ADDRESS_2 & SUBNET_MASK)) //BITvis and jämförelse
return true;
else
return false;
}Sv: &-operatorn för att jämföra om ip-adresser är i samma subnät.
Ja,
int IP_ADDRESS_1 = 10 * pow(256, 3) + 0 * pow(256, 2) + 100 * pow(256, 1) + 7 * pow(256, 0);
kan ersättas med
int IP_ADDRESS_1 = (10 << 24) | (0 << 16) | (100 << 8) | 7;