IP addresses can be stored in a database in any of several ways. These ways may vary based on the volume of the data. I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.
So, let's look at a few ways we can store an IP address.
1. Together as a string in a CHAR(15) column; e.g:
'192.168.0.1'
2. Four separate TINYINT columns; e.g.:
192 168 0 1
3. Store it as a numeric value (a single INT or LONG column); e.g:
3232235521
The first method’s advantages are simple programming and it is directly readable, but it requires more storage space. The second and third methods use comparatively less storage space, but they require additional programming and data handling.
Herewith I am going to share a code snip that used to store IP address as a numeric value
Convert IP address to a Numeric Value
//A.B.C.D <=> A*256^3 + B*256^2 + C*256 + D
// <=> A* 16777216 + B*65536 + C*256 + D
long val = (long.Parse(splitArray[0]) * 16777216) +
(long.Parse(splitArray[1]) * 65536) +
(long.Parse(splitArray[2]) * 256) +
(long.Parse(splitArray[3]));
MessageBox.Show(val.ToString());
1:
2:
3:
4:
5:
6:
7:
8:
9:
Select allOpen in new window
Convert Numeric Value to IP address
long ipRem1, ipRem2, ipRem3;
// Convert the text value as long
long convertValue = long.Parse(longValueTextBox.Text.Trim());
// Re-Calculation
long ipAdd1 = Math.DivRem(convertValue, 16777216, out ipRem1);
long ipAdd2 = Math.DivRem(ipRem1, 65536, out ipRem2);
long ipAdd3 = Math.DivRem(ipRem2, 256, out ipRem3);
// Construct IP address
string ipAddress = ipAdd1.ToString().Trim() + "."
+ ipAdd2.ToString().Trim() + "."
+ ipAdd3.ToString().Trim() + "."
+ ipRem3.ToString().Trim();
MessageBox.Show(convertValue + " ---> " + ipAddress);
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Select allOpen in new window
Also you can check the validity of the single-value IP address by using this function:
/// <summary>
/// Checks the validity.
/// </summary>
/// <param name="values">The values.</param>
/// <returns></returns>
private static bool CheckValidity(IEnumerable<string> values)
{
foreach(var val in values)
{
int tempval;
try
{
tempval = Int32.Parse(val);
}
catch(Exception)
{
return false;
}
if (tempval < 0 || tempval > 255)
{
return false;
}
}
return true;
}
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
Select allOpen in new window