Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting a partial IP address string to an IP address object

Tags:

powershell

ip

Why does the System.Net.IpAddress allow the following strings to be converted to valid IP addresses?

 $b = [ipaddress]"10.10.10"
 $b.IPAddressToString
 #10.10.0.10

 $c = [ipaddress]"10.10"
 $c.IPAddressToString
 #10.0.0.10

 $d = [ipaddress]"10"
 $d.IPAddressToString
 #0.0.0.10

I can see that the pattern is that the last octet in the string is the last octet in the IPAddress object, and whatever the first octets are in the string, are used as the left most octets in the IPAddress, and zeros are used to fill the middle unspecified octets, if any.

But why does it do this? As a user I'd expect it to fail during conversion unless all octets are specified. Because it allows these conversions, unexpected results like this are possible when checking if a string is a valid IP address:

[bool]("10" -as [ipaddress]) #Outputs True
like image 311
David Klempfner Avatar asked Oct 12 '16 00:10

David Klempfner


People also ask

Which of the following function is used to convert a string into an Internet address stored in a structure?

in_addr_t inet_addr(const char *strptr) This function call converts the specified string in the Internet standard dot notation to an integer value suitable for use as an Internet address.

Is IP address a string or integer?

The following constitutes a valid IPv4 address: A string in decimal-dot notation, consisting of four decimal integers in the inclusive range 0–255, separated by dots (e.g. 192.168. 0.1 ).

Is IP address a string?

An IP address is a string of numbers separated by periods. IP addresses are expressed as a set of four numbers — an example address might be 192.158.1.38. Each number in the set can range from 0 to 255.


1 Answers

According to https://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse.aspx?f=255&MSPPError=-2147217396

The number of parts (each part is separated by a period) in ipString determines how the IP address is constructed. A one part address is stored directly in the network address. A two part address, convenient for specifying a class A address, puts the leading part in the first byte and the trailing part in the right-most three bytes of the network address. A three part address, convenient for specifying a class B address, puts the first part in the first byte, the second part in the second byte, and the final part in the right-most two bytes of the network address.

like image 123
David Klempfner Avatar answered Sep 30 '22 10:09

David Klempfner