之前的發問文 <<C++ 處理 IPv4 的二三事>>
感謝版友的回答,我寫了一個包裝 IPv4 的 class
若是有遇到類似需要對一個 IP 範圍作迴圈處理 (eq.IP scan)
此 class 可以很方便的處理。
此 class 目前是 win32 平台上的版本,在 linux 上只要把 header file 改掉就可
code:
http://codepad.org/WGXlCBgr
=====================================================
#include <iostream>
using namespace std;
#include <winsock.h>
struct bad_Ipv4 : std::bad_cast
{
const char* what() const throw()
{
return "bad Ipv4 format";
}
};
class IP
{
IN_ADDR ip;
public:
IP(std::string my_ip= "0.0.0.0")
{
if( (ip.s_addr = inet_addr(my_ip.c_str()) ) == INADDR_NONE )
throw bad_Ipv4();
}
std::string get() const{
return inet_ntoa(ip);
}
IP& operator++(){
ip.s_addr = htonl ( ntohl(ip.s_addr) + 1 );
return *this;
}
const IP operator++(int){
IP oldIp = *this;
++(*this);
return oldIp;
}
bool operator < (const IP& other) const
{
return ntohl(ip.s_addr) < ntohl( inet_addr(other.get().c_str() ) );
}
bool operator == (const IP& other) const
{
return ip.s_addr == inet_addr(other.get().c_str());
}
bool operator !=(const IP& other)const
{
return !(*this == other);
}
};
// 測試檔案
int main()
{
IP ip_start("192.168.8.1");
IP ip_end("192.168.8.254");
for(;ip_start!=ip_end; ++ip_start)
cout << ip_start.get() << endl;
}
====================================================================
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.177.202
※ 編輯: spider391 來自: 61.216.177.202 (03/11 11:55)