在解析过程中如何区分IP地址和域名

时间:2019-06-13 10:35:04

标签: c++ parsing networking dns ip-address

我正在构建一个应用程序,用户可以通过指定服务器的IP地址或域名来指定要连接的服务器。但是,如何解析此输入,以便应用程序知道它是IP地址还是域名?区分IP地址和DNS记录的原因是什么?

我试图在我们的DNS服务器中添加一个IP地址作为域名。而且有效。我现在可以将192.168.30.230例如解析为10.0.0.1。我什至可以ping它(因为我在10.0.0.1上有一个设备)。但是,这需要我在地址后添加.(点)以强制ping进行查找。否则,它将像IP地址一样使用它。也就是不查找它。

DNS设置看起来像这样:

RECORD    DNS Address       IP-Adress
A         192.168.30.230    10.0.0.1
C:\Users\JohnDoe>ping 192.168.30.230.

Pinging 192.168.30.230 [10.0.0.1] with 32 bytes of data:
Reply from 10.0.0.1: bytes=32 time<1ms TTL=127
Reply from 10.0.0.1: bytes=32 time<1ms TTL=127
Reply from 10.0.0.1: bytes=32 time<1ms TTL=127
Reply from 10.0.0.1: bytes=32 time<1ms TTL=127

Ping statistics for 10.0.0.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

是真的IP地址和域名可以互换,还是在解析用户输入时可以做任何假设?

1 个答案:

答案 0 :(得分:1)

您应该使用regex测试用户输入,就像ping命令一样。以下示例应匹配从0.0.0.0255.255.255.255的任何数字变化。任何不匹配的内容都应视为域名。

/^(?=.*[^\.]$)((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.?){4}$/