首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi中的IP地址字符串例程?

问Delphi中的IP地址字符串例程?
EN

Stack Overflow用户
提问于 2011-12-15 19:10:32
回答 1查看 11K关注 0票数 4

我正在寻找一种在Delphi中验证和操作IP地址的方法。它应该能做的一些事情是..。

  • 验证字符串是有效的IP地址。
  • 验证字符串是有效的子网掩码。
  • 验证IP地址是否位于给定子网内
  • 用于存储IP地址的某种类型(记录或字符串或其他任何类型)
  • IP地址类型(如String或Array[0..3] of Byte )的基本转换
  • 任何其他IP地址例程都可以使IP操作更容易。

最基本的原因是,在我开始重新发明之前,我想看看这些东西是否已经存在了。

EN

回答 1

Stack Overflow用户

发布于 2011-12-15 19:57:15

我已经编写了您所需的所有函数,但恐怕我无法共享代码。

但是,突触库在synaip单元中包含了相当多的函数。例如:

代码语言:javascript
复制
function IsIP(const Value: string): Boolean;
function IsIP6(const Value: string): Boolean;
function IPToID(Host: string): Ansistring;
function StrToIp6(value: string): TIp6Bytes;
function Ip6ToStr(value: TIp6Bytes): string;
function StrToIp(value: string): integer;
function IpToStr(value: integer): string;
function ReverseIP(Value: AnsiString): AnsiString;
function ReverseIP6(Value: AnsiString): AnsiString;

几年前,当我尝试这些函数时,IPv6函数有些错误,特别是在处理压缩的IPv6地址时。

如果您想自己滚,这里有几个提示:

  • 操作IPv4地址相当简单,因为它们只包含32位,可以存储在标准整数类型中。IPv6地址更难,因为它们需要128个位,而且没有一个本机类型有这么多位。
  • 在尝试操作IP地址之前,首先将其转换为整数(当然,IPv4只需要一个不同的存储方法)。要做到这一点,使用'.‘分割IP地址。作为分隔符。检查每个单独的值只包含数字,下降在0到255之间,然后使用这些值生成最终整数。
  • 一旦IP地址被转换成整数,您可以任意操作它。例如,给定一个IP地址和一个子网掩码,您可以找到IP地址属于的子网,例如IPtoInt(IPAddress)而不是(IPToInt(SubnetMask))=子网的整数。现在,您可以为整数子网提供一个整数IP地址,以查看IP是否在子网中。
  • 最后,将整数IP地址转换回字符串。

如果你有任何具体问题,我也可以试着回答。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8525314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档