IP classes {IP} | R Documentation |
IPv4, IPv6 and IP classes
Description
classes for IPv4 and IPv6 addresses
Usage
ipv4(object,...)
ipv6(object,...)
ip(e1,e2,...)
Arguments
object |
a vector of IPv4 or IPv6 strings. If missing, returns an empty IPv4 or IPv6 object |
e1 , e2 |
either e1= a vector of IPv4 or IPv6 strings (and e2 missing) or objects of class e1 = an object of class IPv4' and e2 = an object of class 'IPv6 |
... |
for |
Details
IPv4 and IPv6 objects are created either from either character strings or integer vectors through ipv4()
and ipv6()
calls.
IP objects store both IPv4 and IPv6 addresses. IP are created either from a character string or from IPv4 and IPv6 objects through ip()
calls.
Since the IPv4 and IPv6 protocols use a different address representation, IP objects store both IPv4 and IPv6 addresses but do not mix them. The i-th element of an IP object can only an IPv4 or an IPv6 address but not both. So, if the i-th IPv4 is set, the corresponding i-th IPv6 must be NA and vice-versa.
in addition to object creation, he ipv4()
and ipv6()
methods also extract the IPv4 and IPv6 addresses from an IP object and return an object with the same length. Use the drop argument to remove all NA values.
Like atomic base R vectors, IPv4, IPv6 and IP objects elements can be subsetted ([
) and replaced ([<-
) and named (name<-
). Objects can also be concatenated (c()
or rbind2()
) or stored in a data.frame
.
Note that in order to avoid undesirable side-effects, is.numeric()
returns FALSE
Examples
##
ipv4("0.0.0.0")==ipv4(0L)
##
ipv6("::")==ipv6(0L)
## create an empty object
ip0 <- ip()
## grow it
ip0[3] <- ipv4(3L)
ip0[5] <- ipv6(5L)
ip0
## same thing with NA
ip0 <- ip()
ip0[2] <- NA
ip0
## private networks
ip.strings <- c(v4 = "192.0.0.1", v6 = "fd00::1" )
##
(ip4 <- ipv4(ip.strings))
##
(ip6 <- ipv6(ip.strings))
##
(ip <- ip(ip.strings))
##
all(ip==ip(ip4, ip6))
##
pnet0 <- data.frame(
ip
, v = ip.version(ip)
)
##
pnet1 <- rbind(
pnet0
, within(pnet0, ip <- ip+1L)
)
##
pnet0==pnet1[1:2,]
## fails (why?):
identical(pnet0,pnet1[1:2,])
##
ip(ip4[1],ip6[2],append=TRUE)
##
## IPv6 transition mechanism
##
## IPv4-mapped Address
(ip6 <- ipv6("::ffff:c000:0280"))==ipv6("::ffff:192.0.2.128")
##
ipv6.reserved()[ip.index(ipv6.reserved())(ip6)]
## NAT64 IPv4-IPv6 translation
(ip6 <- ipv6("64:ff9b::c000:201") ) & ipv6.hostmask(96)
##
ipv6.reserved()[ip.index(ipv6.reserved())(ip6)]