-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathipcalc.php
227 lines (212 loc) · 5.49 KB
/
ipcalc.php
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
<?php
/**
* Project: IPCALC :: IP calculator / subnetting<br>
* File: IPCALC.php
*
* 이 class는 IP 계산과 서브네팅을 지원한다.
*
* @category Networking
* @package IPCALC
* @author JoungKyun.Kim <http://oops.org>
* @copyright (c) 2018, JoungKyun.Kim
* @license LGPL
* @link http://pear.oops.org/package/ipcalc
* @since File available since release 0.0.1
* @example IPCALC/test.php Sample code of IPCLAC class
* @filesource
*/
/**
* import IPCALCLogic class
*/
require_once 'IPCALC/IPCALC.php';
/**
* IPCALC 의 frontend Class
* @package IPCALC
*/
class IPCALC extends IPCALCLogic
{
// {{{ (void) IPCALC::__construct (void)
/**
* Initialize IPCALC class
*
* @access public
* @return void
*/
function __construct () { }
// }}}
// {{{ (long) IPCALC::ip2long ($ip)
/**
* Dot로 구분된 IPv4 주소를 정수형 주소로 변환
*
* PHP의 ip2long API가 singed 형이기 때문에 음수의 값이 나올 수
* 있어, 이 API를 제공하여 항상 양수의 값이 나올 수 있도록 지원.
*
* {@example IPCALC/test.php 18 3}
*
* @access public
* @return long unsigned 형의 정수형 네트워크 주소
* @param string Dot로 구분된 IPv4 주소
*/
static function ip2long ($ip) {
return parent::ip2long ($ip);
}
// }}}
/**
* alias IPCALC::valid_ipv4_addr
*/
static function is_ipaddr ($ip) {
return parent::valid_ipv4_addr ($ip);
}
// {{{ (boolean) IPCALC::valid_ipv4_addr ($ip)
/**
* 인자로 주어진 값이 정상적인 IPv4 주소인지를 체크
*
* {@example IPCALC/test.php 24 2}
*
* @access public
* @return boolean 정상적인 IP일 경우 true, 그 외 false
* @param string Dot로 구분된 IPv4 주소
*/
static function valid_ipv4_addr ($ip) {
return parent::valid_ipv4_addr ($ip);
}
// }}}
// {{{ (string) IPCALC::prefix2mask ($prefix)
/**
* 네트워크 prefix를 네트워크 mask로 변환
*
* {@example IPCALC/test.php 29 2}
*
* @access public
* @return string 네트워크 mask
* @param integer 네트워크 prefix
*/
static function prefix2mask ($prefix) {
$r = parent::prefix2long ($prefix);
return long2ip ($r);
}
// }}}
// {{{ (int) IPCALC::mask2prefix ($mask)
/**
* 네트워크 mask를 네트워크 prefix로 변환
*
* {@example IPCALC/test.php 33 2}
*
* @access public
* @return int 네트워크 prefix
* @param string 네트워크 mask
*/
static function mask2prefix ($mask) {
$mask = ip2long ($mask);
return parent::long2prefix ($mask);
}
// }}}
// {{{ (string) IPCALC::network ($ip, $mask) {
/**
* 주어진 IPv4 주소와 네트워크 mask로 구성된 서브넷의 네트워크
* 주소를 반환
*
* {@example IPCALC/test.php 37 2}
*
* @access public
* @return string 해당 서브넷의 네트워크 주소
* @param string IPv4 주소
* @param string 네트워크 mask 또는 prefix
*/
static function network ($ip, $mask) {
$r = parent::network ($ip, $mask);
return long2ip ($r);
}
// }}}
// {{{ (string) IPCALC::broadcast ($ip, $mask)
/**
* 주어진 IPv4 주소와 네트워크 mask로 구성된 서브넷의 브로드캐스트
* 주소를 반환
*
* {@example IPCALC/test.php 41 2}
*
* @access public
* @return string 해당 서브넷의 브로드캐스트 주소
* @param string IPv4 주소 또는 long형 주소값
* @param string 네트워크 mask
*/
static function broadcast ($ip, $mask) {
$r = parent::broadcast ($ip, $mask);
return long2ip ($r);
}
// }}}
// {{{ (int) IPCALC::guess_prefix ($start, $end)
/**
* 시작 주소와 마지막 주소를 포함한 서브넷의 prefix를 반환
*
* {@example IPCALC/test.php 45 2}
*
* @access public
* @return int 네트워크 prefix
* @param string 범위의 시작 IPv4 주소
* @param string 범위의 마지막 IPv4 주소
*/
static function guess_prefix ($start, $end) {
return parent::guess_prefix ($start, $end);
}
// }}}
// {{{ (string) IPCALC::guess_netmask ($start, $end)
/**
* 시작 주소와 마지막 주소를 포함한 서브넷의 최소 mask를 반환
*
* {@example IPCALC/test.php 49 2}
*
* @access public
* @return string 네트워크 mask
* @param string 범위의 시작 IPv4 주소
* @param string 범위의 마지막 IPv4 주소
*/
static function guess_netmask ($start, $end) {
return parent::guess_netmask ($start, $end);
}
// }}}
// {{{ (binary) IPCALC::htonl ($v)
/**
* 4 Byte unsigned 정수를 host byte order에서 network byte
* order로 변환
*
* x86/x86_64 cpu에서는 little endian을 big endian으로 변환
* 하는 것과 동일 함
*
* @access public
* @return binary network byte order로 변환된 binary
* @param int 4 Byte 양수형 정수
*/
static function htonl ($v) {
return pack ('N', $v);
}
// }}}
// {{{ (long) IPCALC::ntohl ($v)
/**
* Network oerder byte로 구성된 4 Byte 정수 binary data를
* signed 정수로 변환
*
* x86/x86_64 cpu에서는 big endian을 little endian으로 변환
* 하는 것과 동일 함
*
* @access public
* @return long 4 Byte signed 정수
* @param binary Network byte order로 구성된 4Byte 정수 binary
*/
static function ntohl ($v) {
for ( $i=3; $i>=0; $i-- )
$v1 .= $v[$i];
$val = unpack ('ilittle', $v1);
return $val['little'];
}
// }}}
}
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
* vim600: noet sw=4 ts=4 fdm=marker
* vim<600: noet sw=4 ts=4
*/
?>