接受包含IPv4或IPv6地址的字符串並獲取IP號碼的最簡單方法是什麼?如何將IP地址解析爲Haskell中的IP地址?
2
A
回答
3
這裏有一個副本就緒解決方案:
module Program where
import Data.IP
ipToOcts :: IP -> [Int]
ipToOcts (IPv4 ip) = fromIPv4 ip
ipToOcts (IPv6 ip) = fromIPv6b ip
ipToInteger :: IP -> Integer
ipToInteger =
sum . map (\(n,o) -> toInteger o * 256^n) . zip [0..] . reverse . ipToOcts
ipStringToInteger :: String -> Integer
ipStringToInteger = ipToInteger . read
調用示例:
ipStringToInteger "134.244.11.55"
ipStringToInteger "2001:db8:00:00:00:00:00:01"
您需要iproute包爲:
cabal install iproute
2
Data.IP
具有IPv4
和IPv6
支持從字符串解析的類型,以及將它們轉換爲值列表的功能Int
值。
> fromIPv4 . read "192.0.0.1"
[192,0,0,1]
> fromIPv6b . read "2001:0db8::1"
[32,1,13,184,0,0,0,0,0,0,0,0,0,0,0,1]
一旦你的列表,你可以將它摺疊成一個整數,如果你喜歡:
> import Data.List
> foldl' (\acc octet -> 256*acc + fromIntegral octet) 0 [192,0,0,1]
3221225473
(由於這兩個fromIPv4
和fromIPv6
回報[Int]
值,fromIntegeral
確保摺疊可以返回Integer
。)
但是,考慮你是否實際上需要一個整數。您擁有的任何API都將以正確的順序關注單個字節。除了將地址序列化爲二進制文件之外,您可能甚至不需要該地址。
相關問題
- 1. 如何解析IP地址?
- 2. 將主機名解析爲IP地址
- 3. C#將獲取的地址解析爲IP地址
- 4. 如何用Perl解析IP地址和地址範圍?
- 5. C#中的IP地址解析問題#
- 6. 無法理解IP地址中的IP地址
- 7. 如何在Metro/WinRT中將主機名解析爲IP地址?
- 8. 如何用頁面中的IP地址替換IP地址中的IP地址(例如「國家,地區,城市」)
- 9. 在php中解析ip地址
- 10. 將IP地址轉換爲IP範圍
- 11. 編程地使用Mac地址解析Ip地址
- 12. 的IP地址
- 13. MAC地址和IP地址
- 14. 如何從IP地址列表中查找IP地址範圍
- 15. 變換IP地址,IP地址範圍(起始IP - 結束IP)
- 16. python解析文件的IP地址
- 17. 解析主機名的ip地址
- 18. 解析和IP的增量地址
- 19. 用PHP解析大量的IP地址
- 20. 如何將主機名異步解析爲IP地址?
- 21. 如何將域名解析爲單個IP地址?
- 22. 如何將MAC地址轉換爲相應的IP地址?
- 23. 如何快速找到IP地址範圍內的IP地址?
- 24. 本地IP地址?
- 25. 如何將IP地址轉換爲DWORD?
- 26. 如何將IP地址作爲輸入
- 27. IP地址將不會連接到相同的IP地址
- 28. IP地址解析使用PHP回聲
- 29. 基本bonjour java IP地址解析
- 30. awk從maillog解析唯一IP地址
的IP ...多少?你到底在找什麼? 'data IP4 = IP4 Word8 Word8 Word8 Word8',還是C庫的東西? – Zeta
例如「134.244.11.55」,並得到2264140599 我也需要爲IPv6做這件事。 – Vlam
所以你想要一個32位整數的IPv4和一個128位整數的IPv6?或者我想只是一個'整數',我不認爲標準庫中有128位固定寬度的整數。 – Cubic