文档管理中心

如何判断某个IP是否在某IP段范围内

问题现象

当前IP:192.168.9.230,如何判断该目标IP是否在10.101.10.210~255.201.255.1范围内?

背景知识

IPv4地址采用点分十进制表示法,每个点分部分称为一个"八位组",范围是0-255。判断某个IP是否在某IP段范围内可以先将IP转换为32位无符号整数,转换原理是基于256进制(2^8)的位权计算。例如:192.168.1.1=192×256³ + 168×256² + 1×256 + 1。

解决方案

判断当前IP是否在某IP段范围内,可以参照以下步骤:

  1. 将点分十进制格式的IP地址转换为长整型数字,便于比较大小。
  2. 检查目标IP是否在指定的起始IP和结束IP范围内。
收起
自动换行
深色代码主题
复制
  1. function ipToLong(ip: string): number {
  2. const parts = ip.split('.').map(part => parseInt(part));
  3. return parts[0] * Math.pow(256, 3) + parts[1] * Math.pow(256, 2) + parts[2] * 256 + parts[3];
  4. }
  5. function isIPInRange(ip: string, startIP: string, endIP: string): boolean {
  6. const ipNum = ipToLong(ip);
  7. const startIPNum = ipToLong(startIP);
  8. const endIPNum = ipToLong(endIP);
  9. return ipNum >= startIPNum && ipNum <= endIPNum;
  10. }
  11. @Entry
  12. @Component
  13. struct JudgeIp {
  14. judge() {
  15. const targetIP = '192.168.9.230';
  16. const startIP = '10.101.10.210';
  17. const endIP = '255.201.255.1';
  18. let res = isIPInRange(targetIP, startIP, endIP);
  19. try {
  20. this.getUIContext().getPromptAction().showToast({ message: `目标ip地址是否在范围内: ${res}` });
  21. } catch (error) {
  22. console.error(`Error code: ${error.code}, Message: ${error.message}`);
  23. }
  24. }
  25. build() {
  26. Column() {
  27. Button('查询').onClick(() => {
  28. this.judge();
  29. });
  30. }.width('100%').height('100%').justifyContent(FlexAlign.Center);
  31. }
  32. }
在 FAQ 中进行搜索
请输入您想要搜索的关键词