1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
/* ipaddress.cpp
*
* Copyright (c) 1998, 1999, Alexander Neundorf, Lukas Pustina
* [email protected]
* [email protected]
*
* You may distribute under the terms of the GNU General Public
* License as specified in the COPYING file.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#include "ipaddress.h"
#include <iostream>
IPAddress::IPAddress()
{
}
IPAddress::IPAddress(const MyString& ip)
{
if (ip.length()==0)
s="0.0.0.0";
else s=ip;
i=string2Int(s);
n=string2Struct(s);
}
IPAddress::IPAddress(unsigned int ip)
{
i=ip;
s=int2String(i);
n.s_addr=htonl(i);
//n=string2Struct(s);
}
IPAddress::IPAddress(struct in_addr ip)
{
n=ip;
s=struct2String(n);
i=string2Int(s);
}
IPAddress::IPAddress(int b1, int b2, int b3, int b4)
{
char tmp[30];
sprintf(tmp,"%i.%i.%i.%i",b1,b2,b3,b4);
s=tmp;
i=string2Int(s);
n=string2Struct(s);
}
MyString IPAddress::int2String(unsigned int ip)
{
MyString tmp("");
struct in_addr addr;
addr.s_addr=htonl(ip);
tmp=inet_ntoa(addr);
return tmp;
}
MyString IPAddress::struct2String(struct in_addr ip)
{
return MyString(inet_ntoa(ip));
}
unsigned int IPAddress::string2Int(MyString ip)
{
// struct in_addr addr;
// inet_aton(ip.c_str(),&addr);
// cout<<addr.s_addr<<endl;
// return ntohl(addr.s_addr);
return ntohl(inet_addr(ip.c_str()));
}
struct in_addr IPAddress::string2Struct(MyString ip)
{
struct in_addr tmp;
// inet_aton(ip.c_str(),&tmp);
tmp.s_addr = inet_addr(ip.c_str());
return tmp;
}
void IPAddress::print()
{
std::cout<<"address as string: "<<s<<std::endl;
std::cout<<"address in host byte order: "<<std::ios::hex<<i<<std::ios::dec<<std::endl;
std::cout<<"address in network byte order: "<<std::ios::hex<<n.s_addr<<std::ios::dec<<std::endl;
}
|