Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define IP_MAXLEN 15
- stock ipcmp(ip1, ip2, mask= 0xffffffff) return ip1&mask == ip2&mask;
- stock ip2long(ip[])
- {
- new res= 0x00000000, oct= 0;
- for(new idx= 0, val= 0, len= strlen(ip); oct < 4 && idx < len; oct++, idx++, val= 0)
- {
- for(new i= idx, j= 2; i < len-1; i++)
- {
- if (i-idx >= j) return 0x00000000;
- else if ('0' <= ip[i] <= '9') idx++;
- else if (ip[i] == '*') { j= 1; val= 255; break; }
- else if (ip[i] == '.') { idx= i; break; }
- else return 0x00000000;
- }
- if (ip[idx] == '.' && (idx == 0 || ip[--idx] == '.')) return 0x00000000;
- if (ip[idx] != '*') for(new i= idx, exp= 1; i >= 0 && ip[i] != '.'; i--)
- {
- if (!('0' <= ip[i] <= '9') || idx-i > 2) return 0x00000000;
- val += (ip[i]-'0')*exp; exp *= 10;
- if (val > 255) return 0x00000000;
- }
- res <<= 8; res += val; idx++;
- }
- if (oct < 4) return 0x00000000
- else return res << ((4-oct)*8);
- }
- stock long2ip(ip, mask= 0xffffffff, bool: wildcards= false)
- {
- new res[IP_MAXLEN+1];
- for(new ip2= ip&mask, idx= 0, i= 0, oct= 1; oct <= 4; ip2 <<= 8, idx++, i= 0, oct++)
- {
- new str[3+1];
- for(new val= ip2 >>> 24; val > 0 || i == 0; i++)
- {
- if (wildcards && val == 0x00) { str[i++]= '*'; break; }
- else { str[i]= (val%10)+'0'; val /= 10; }
- }
- for(--i; i >= 0 && idx < IP_MAXLEN; i--) res[idx++]= str[i];
- if (oct < 4 && idx < IP_MAXLEN) res[idx]= '.';
- }
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment