What is a valid hostname label?
Solution 1
What the RFC says is actually immaterial here. The RFC specifies what goes on at the DNS level, but that's moot if ping doesn't make a DNS query in the first place. When ping receives an all-numeric argument, it interprets it as an IP address.
IPv4 addresses are technically 32-bit numbers. They are almost always written in dot-decimal notation, so-called “dotted quads” like 127.0.0.1
. But they can also be written as a single number in decimal like 2130706433
or in hexadecimal like 0x7f000001
.
$ ping 2130706433 # 127*2^24 + 1
PING 2130706433 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.027 ms
$ ping 0.0.25.192
connect: Invalid argument
Addresses in the range 0.0.0.0/8 are reserved for use as source addresses in broadcasts. You can't send a packet to them, which is why connect(2)
returns EINVAL
.
Many programs, including most ping implementations, have no option to force a DNS lookup. You would run into similar trouble if you made a local network with all-numeric subdomains, and ended up with a valid hostname that looked like a dotted quad.
If your local network has a name, ping 6592.mynetwork
will work. But you're likely to run into similar trouble down the line, as sooner or later you'll want to omit the domain name. Just go with the flow and include a letter, preferably at the start.
Solution 2
Well, not exactly... What Wikipedia, and in turn the RFCs say is that since the original RFC 952, which didn't allow leading numerics, you can now have them. ( Per RFC 1123 ) You still can't have all numeric though, which is your problem.
Your '6952' isn't a valid hostname, while '6952x' should be fine. But, RFCs aside, I've had problems within the last year or so with leading numerics. I'd avoid them, unless there's a compelling reason not to.
Related videos on Youtube
tshepang
I do software development for a living and as a hobby. My favorite language is Rust, and I've used Python much in the past. My OS of choice is Debian.
Updated on September 17, 2022Comments
-
tshepang over 1 year
I set up my hostname to a number, where running
hostname
gives:6592
But when I run
ping 6592
, I get:connect: Invalid argument
I checked the related Wikipedia page, and it does say that such a hostname is allowed (IIUC). What am I missing?
-
tshepang about 13 yearsCan you quote where in RFC 1123 where it's said the name can't be entirely numeric. I can't find it.
-
Justin Ethier about 13 yearsExactly, the only thing I found was this:
a segment of a host domain name is now allowed to begin with a digit and could legally be entirely numeric (see Section 6.1.2.4).
-
tshepang about 13 yearsThe statement you quoted doesn't address my question. Maybe you misunderstood (or I'm missing something?).
-
Finbarr about 13 yearsI think there's ambiguity in the text between the original, 'no leading numeric' RFC and the later 'leading numeric OK' version. That's the point. All I know is fully-numeric hostnames cause frequent breakage, so they're a poor practice. RFCs are not laws, nor are they guaranteed to be perfectly implemented.