如何轉換的IP地址到整數形式如下: A.B. 。或A.B.C. *或A. 。。*或。。 。 我想寫一個C程序,它可以確定IP地址是否是另一個子集。例如IP地址192.168.125.5是192.168的子集。 。。現在我想將這兩個IP地址轉換爲唯一的整數,然後檢查一個是否是另一個的子集。有沒有辦法做到這一點?
回答
一個IP地址,例如, 192.168.0.1可以很容易地寫成一個十六進制,它變成0xC0 0xA8 0x00 0x01或只是0xC0A80001
然後它只是一個比特匹配的情況,所以你構造了一個相應的子網掩碼,255.255.0.0這就是隻是0xFFFF0000地址,你可以測試這兩個比賽做:
0xC0A80001 & 0xFFFF0000 == 0xC0A80000 & 0xFFFF0000
在平等測試的一側,而另一側是一個真正的地址,在「你關心基地的東西」,與給定的面具作爲雙方相同。
通常你可以通過設置'*'爲0的東西以及實際數字爲0xFF的東西來構造一個合適的掩碼,如果你想要更精細的穀物掩模,用'*'很難表達。
易於和非一般的方法是使用的sscanf(與詮釋A,B,C,d): sscanf(ip, "%d.%d.%d.%d", &a, &b, &c, &d);
但它只能如果您有IP與所有部分:10.47.100.1
如果不是這種情況,仍然可以使用返回的值sscanf
,它會告訴您有多少匹配找到(或EOF)成功。
經過4個號碼後,您可以檢查子集關係。
不,我想將IP地址轉換爲整數,然後檢查子集關係.... – mmuttam 2012-04-23 15:47:32
您仍然可以從您得到的4中構造一個整數。困難的部分是解析整數。稍後,您可以像其他人在此處所建議的那樣將它們左移。 – 2012-04-23 15:59:19
單個整數(假設爲32位)不足以表示要顯示的內容。你需要更多的信息才能表達星號。例如,你可以有一對(地址,網絡掩碼),其中網絡掩碼或者是代表有效高位位數的單個小整數,因此例如網絡地址如「10.0」。 0.0「可以由對(0x0a000000,8)表示。如果你真的想在地址中出現通配符,出於某種原因,每個地址位都需要一組完整的標誌位,所以需要兩個32位整數。然後你可以像「192.168。。」這樣的對(0xc0a80000,0xffff0000)。
你想要的是確定一個IP地址是否在一個子網中,並做到這一點,你想申請一個網絡掩碼。有可能(當然)庫已經在那裏做你想做的。這是如果你想推出自己的。
如果該IP地址來自受信任的來源(即非用戶),那麼你可以簡單地做這樣的事情提取一個標準的C-string中的IP地址:
char ipAddressString[16] = "192.168.125.5"
char netMaskString[16] = "255.255.0.0"
char subnetString[16] = "192.168.0.0"
uint32_t ipAddress = parseIPV4string(ipAddressString);
uint32_t netmask = parseIPV4string(netmaskString);
uint32_t subnet = parseIPV4string(subnetString);
if (ipAddress & netmask == subnet) {
return true;
}
uint32_t parseIPV4string(char* ipAddress) {
char ipbytes[4];
sscanf(ipAddress, "%uhh.%uhh.%uhh.%uhh", &ipbytes[3], &ipbytes[2], &ipbytes[1], &ipbytes[0]);
return ipbytes[0] | ipbytes[1] << 8 | ipbytes[2] << 16 | ipbytes[3] << 24;
}
不錯,謝謝你的解析器邏輯! – 2015-03-17 01:45:18
在char(ipbytes [x])指針中讀取int(%d)會導致嚴重錯誤,因爲sscanf會將sizeof(int)字節寫入ipbytes [x]指向的內存中。這個例子非常危險。 – Zac 2015-10-13 14:20:44
@Zac多麼尷尬!我修復了錯誤。 – OmnipotentEntity 2015-10-13 14:25:07
- 1. 將整數值轉換爲IP地址
- 2. 如何將整數數組轉換爲C++中的IP地址?
- 3. 將本地IP地址轉換爲整數
- 4. 轉換IP範圍的IP地址
- 5. MAC地址到IP轉換
- 6. 如何手動將整數轉換爲Ruby中的IP地址
- 7. 如何將IP地址轉換爲BigQuery中的整數?
- 8. 將IP地址轉換爲紅寶石中的32位整數
- 9. 的iOS轉換IP地址整數和向後
- 10. 將IP地址轉換爲IP範圍
- 11. 將負數轉換爲IP地址python
- 12. 整數IP地址 - C
- 13. 轉換IP地址(IPv4)itno一個整數在R
- 14. 如何將IP地址轉換爲MAC地址字節數組?
- 15. 變換IP地址,IP地址範圍(起始IP - 結束IP)
- 16. 替換IP地址?
- 17. 轉換4個32位整型到IP地址在java中
- 18. 如何將MAC地址轉換爲相應的IP地址?
- 19. 轉換[NSNetservice地址]到IP地址的字符串
- 20. 將IP地址轉換爲主機名
- 21. 如何將IP地址轉換爲DWORD?
- 22. 將int轉換爲IP地址
- 23. 使用Python進行IP地址轉換
- 24. 將IP地址char轉換爲long
- 25. 轉換IP地址,以提高:: UINT32
- 26. 轉換IP地址字節在Python
- 27. 將號碼轉換爲IP地址(v4)
- 28. 將IP地址轉換爲位[]
- 29. Python將Base64編碼的IP地址轉換爲十進制IP地址
- 30. 如何在保存到數據庫之前將IP地址轉換爲整數
你不想要將IP地址轉換爲整數。僅適用於IPv4的開始。你想將它們轉換爲適當長度的字節數組,然後對它們進行網絡掩碼操作。 – EJP 2012-04-24 08:42:02
如果你的平臺擁有它,則使用'inet_pton()'。 – Jasen 2015-12-03 22:58:47