對函數recv_from()
的調用返回(長度爲SocketAddr
)元組。此枚舉上沒有方法將IP地址提取爲字節數組,但它確實包含IpAddr
枚舉,該枚舉可以使用ip()
函數獲取。 IpAddr
包含一個Ipv4Addr
或Ipv6Addr
結構,它具有一個名爲octets()
的功能,它完全符合我的需要。是否有可能從SocketAddr
獲得訪問權限?如何從Rust中的SockAddr獲取IP地址的字節表示形式?
0
A
回答
3
是的,你可以,但最終你需要考慮地址可能是v4或v6,並使用模式匹配進行相應處理的事實。基本上是:
match sa.ip() {
IpAddr::V4(ip) => /* something with ip.octets() which is a [u8; 4] */,
IpAddr::V6(ip) => /* something with ip.octets() which is a [u8; 16] */,
}
例如,如果你想成爲未來的不友好,你可以
let octets = match sa.ip() {
IpAddr::V4(ip) => Ok(ip.octets()),
_ => Err("Not an IPv4 Address"),
};
它返回V4地址的成功的結果,但對那些V6錯誤。我並不真正瞭解Rust,但看起來在這兩種情況下,處理返回值octets()
之間的類型差異的唯一正確方法是將結果包裝在自己的枚舉中,否則只是避免它與適當的模式匹配內的八位組一起工作。
0
,我結束了使用看起來像這樣的解決方案:
let ip_bytes = match addr.ip() {
IpAddr::V4(ip) => ip.octets().to_vec(),
IpAddr::V6(ip) => ip.octets().to_vec(),
};
相關問題
- 1. 如何從sockaddr獲取IP地址
- 2. 如何從Rust中獲取機器的IP地址列表?
- 3. 從struct sockaddr獲取IP地址不適用於32位編譯
- 4. 如何獲取node.js中的IP地址
- 5. 如何獲取IP地址?
- 6. 如何獲取IP地址?
- 7. 如何從IP地址獲取域名
- 8. 如何獲取IP地址列表?
- 9. 如何從網絡上的IP地址獲取MAC地址?
- 10. 從arp獲取IP地址
- 11. 從bssid獲取IP地址
- 12. 從字符串獲取IP地址(Groovy)
- 13. 從節點js中的IP地址獲取時區
- 14. 如何從套接字獲取IP地址在Windows中
- 15. 如何獲取後端的IP地址?
- 16. 如何獲取系統的IP地址
- 17. 如何從IP地址列表中獲取域名
- 18. 如何從IP地址列表中查找IP地址範圍
- 19. 如何在PageMethod中獲取IP地址?
- 20. 如何在Python3.4.3中獲取ip地址
- 21. 如何在Python中獲取IP地址
- 22. 獲取IP地址的mac地址
- 23. 獲取IP地址
- 24. 獲取IP地址
- 25. 獲取IP地址
- 26. 如何獲取erlang節點的IP地址?
- 27. 從網址獲取IP地址
- 28. 獲取我的IP地址
- 29. 獲取ip地址的值
- 30. 從IP地址中獲取域名
這正是我需要的,謝謝!通過將結果轉換爲向量,我想出了一種解決結果差異的方法。在我的情況下,我已經知道IP是v4還是v6。 – JohnF