第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

IP地址轉(zhuǎn)Int

IP地址轉(zhuǎn)Int

Go
不負(fù)相思意 2023-02-06 14:43:58
所以我在將 IPv4 和 IPv6 轉(zhuǎn)換為 Int 時遇到問題,但是我發(fā)現(xiàn)了這個方便的 Go 腳本可以做到這一點,但是我需要它用于 NodeJS。我已經(jīng)嘗試過 NPM 中的插件,ip2int但它似乎已損壞,并且僅適用于 IPv4。我想知道是否有人知道如何將 GO 轉(zhuǎn)換為 nodeJS 的 Javascript。據(jù)我所知,以下代碼在 Go 中有效。package mainimport (    "fmt"    "math/big"    "net")func Ip2Int(ip net.IP) *big.Int {    i := big.NewInt(0)    i.SetBytes(ip)    return i}func main() {    fmt.Println(Ip2Int(net.ParseIP("20.36.77.12").To4()).String())    fmt.Println(Ip2Int(net.ParseIP("2001:0db8:85a3:0000:0000:8a2e:0370:7334").To16()).String())}我們需要將 IP 地址解析為 int 的原因是,當(dāng)我們收到 IP 地址時,我們可以搜索該 IP 地址是否在我們收集的 IP 地址范圍之一內(nèi)。例如 RAPD 回報 "startAddress": "35.192.0.0",  "endAddress": "35.207.255.255",因此,如果我們將這兩個都轉(zhuǎn)換為 int,我們可以將它們存儲在我們的數(shù)據(jù)庫中并執(zhí)行g(shù)te或lte搜索并查看 IP 地址是否在任何存儲值之間。
查看完整描述

2 回答

?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊

更新:在 ipv6 的情況下使用 BigInt 以響應(yīng)下面的評論

請參閱此解決方案。

對于 IPv4 使用:

ipv4.split('.').reduce(function(int, value) { return int * 256 + +value })

對于 IPv6,您首先需要解析十六進(jìn)制值,十六進(jìn)制值代表 2 個字節(jié):

ipv6.split(':').split(':').map(str => Number('0x'+str)).reduce(function(int, value) { return BigInt(int) * BigInt(65536) + BigInt(+value) })

我還在引用的要點中添加了 ipv6 解決方案。


查看完整回答
反對 回復(fù) 2023-02-06
?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗 獲得超5個贊

const IPv4ToInt = ipv4 => ipv4.split(".").reduce((a, b) => a << 8 | b) >>> 0;

和一個簡單的 IPv6 實現(xiàn):


const IPv6ToBigInt = ipv6 => BigInt("0x" + ipv6.toLowerCase().split(":").map(v => v.padStart(4, 0)).join(""));

或更廣泛的


// normalizes several IPv6 formats to the long version

// in this format a string sort is equivalent to a numeric sort

const normalizeIPv6 = (ipv6) => {

  // for embedded IPv4 in IPv6.

  // like "::ffff:127.0.0.1"

  ipv6 = ipv6.replace(/\d+\.\d+\.\d+\.\d+$/, ipv4 => {

    const [a, b, c, d] = ipv4.split(".");

    return (a << 8 | b).toString(16) + ":" + (c << 8 | d).toString(16)

  });


  // shortened IPs

  // like "2001:db8::1428:57ab"

  ipv6 = ipv6.replace("::", ":".repeat(10 - ipv6.split(":").length));


  return ipv6.toLowerCase().split(":").map(v => v.padStart(4, 0)).join(":");

}


const IPv6ToBigInt = ipv6 => BigInt("0x" + normalizeIPv6(ipv6).replaceAll(":", ""));


// tests

[

  "2001:0db8:85a3:08d3:1319:8a2e:0370:7344",

  "2001:0db8:85a3:08d3:1319:8a2e:0370:7345", // check precision

  "2001:db8:0:8d3:0:8a2e:70:7344",

  "2001:db8:0:0:0:0:1428:57ab",

  "2001:db8::1428:57ab",

  "2001:0db8:0:0:8d3:0:0:0",

  "2001:db8:0:0:8d3::",

  "2001:db8::8d3:0:0:0",

  "::ffff:127.0.0.1",

  "::ffff:7f00:1"

].forEach(ip => console.log({

  ip,

  normalized: normalizeIPv6(ip),

  bigInt: IPv6ToBigInt(ip).toString() // toString() or SO console doesn't print them.

}));

.as-console-wrapper{top:0;max-height:100%!important}


查看完整回答
反對 回復(fù) 2023-02-06
  • 2 回答
  • 0 關(guān)注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號