blackfoundry-pcap 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +145 -0
- data/README +48 -0
- data/README.ja +50 -0
- data/Rakefile +23 -0
- data/ext/Pcap.c +798 -0
- data/ext/extconf.rb +16 -0
- data/ext/icmp_packet.c +444 -0
- data/ext/ip_packet.c +342 -0
- data/ext/packet.c +310 -0
- data/ext/ruby_pcap.h +133 -0
- data/ext/tcp_packet.c +121 -0
- data/ext/udp_packet.c +96 -0
- data/lib/pcap_misc.rb +116 -0
- data/lib/pcaplet.rb +113 -0
- metadata +79 -0
data/ext/extconf.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
3
|
+
pcap_dir = with_config("pcap-dir", "/usr/local")
|
4
|
+
pcap_includedir = with_config("pcap-includedir", pcap_dir + "/include")
|
5
|
+
pcap_libdir = with_config("pcap-libdir", pcap_dir + "/lib")
|
6
|
+
|
7
|
+
$CFLAGS = "-I#{pcap_includedir}"
|
8
|
+
$LDFLAGS = "-L#{pcap_libdir}"
|
9
|
+
|
10
|
+
have_library("socket", "socket")
|
11
|
+
have_library("xnet", "gethostbyname")
|
12
|
+
have_func("hstrerror")
|
13
|
+
if have_header("pcap.h") && have_library("pcap", "pcap_open_live")
|
14
|
+
have_func("pcap_compile_nopcap")
|
15
|
+
create_makefile("pcap")
|
16
|
+
end
|
data/ext/icmp_packet.c
ADDED
@@ -0,0 +1,444 @@
|
|
1
|
+
/*
|
2
|
+
* icmp_packet.c
|
3
|
+
*
|
4
|
+
* $Id: icmp_packet.c,v 1.1.1.1 1999/10/27 09:54:38 fukusima Exp $
|
5
|
+
*
|
6
|
+
* Copyright (C) 1999 Masaki Fukushima
|
7
|
+
*/
|
8
|
+
|
9
|
+
#include "ruby_pcap.h"
|
10
|
+
|
11
|
+
/* rfc1256 */
|
12
|
+
#ifndef ICMP_ROUTERADVERT
|
13
|
+
#define ICMP_ROUTERADVERT 9
|
14
|
+
#endif
|
15
|
+
#ifndef ICMP_ROUTERSOLICIT
|
16
|
+
#define ICMP_ROUTERSOLICIT 10
|
17
|
+
#endif
|
18
|
+
|
19
|
+
/* rfc1393 */
|
20
|
+
#ifndef ICMP_TROUTE
|
21
|
+
#define ICMP_TROUTE 30
|
22
|
+
#endif
|
23
|
+
|
24
|
+
/* rfc1788 */
|
25
|
+
#ifndef ICMP_DOMAIN
|
26
|
+
#define ICMP_DOMAIN 37
|
27
|
+
#endif
|
28
|
+
#ifndef ICMP_DOMAINREPLY
|
29
|
+
#define ICMP_DOMAINREPLY 38
|
30
|
+
#endif
|
31
|
+
|
32
|
+
/* rfc1700 */
|
33
|
+
#ifndef ICMP_UNREACH_NET_UNKNOWN
|
34
|
+
#define ICMP_UNREACH_NET_UNKNOWN 6
|
35
|
+
#endif
|
36
|
+
#ifndef ICMP_UNREACH_HOST_UNKNOWN
|
37
|
+
#define ICMP_UNREACH_HOST_UNKNOWN 7
|
38
|
+
#endif
|
39
|
+
#ifndef ICMP_UNREACH_ISOLATED
|
40
|
+
#define ICMP_UNREACH_ISOLATED 8
|
41
|
+
#endif
|
42
|
+
#ifndef ICMP_UNREACH_NET_PROHIB
|
43
|
+
#define ICMP_UNREACH_NET_PROHIB 9
|
44
|
+
#endif
|
45
|
+
#ifndef ICMP_UNREACH_HOST_PROHIB
|
46
|
+
#define ICMP_UNREACH_HOST_PROHIB 10
|
47
|
+
#endif
|
48
|
+
#ifndef ICMP_UNREACH_TOSNET
|
49
|
+
#define ICMP_UNREACH_TOSNET 11
|
50
|
+
#endif
|
51
|
+
#ifndef ICMP_UNREACH_TOSHOST
|
52
|
+
#define ICMP_UNREACH_TOSHOST 12
|
53
|
+
#endif
|
54
|
+
|
55
|
+
/* rfc1716 */
|
56
|
+
#ifndef ICMP_UNREACH_FILTER_PROHIB
|
57
|
+
#define ICMP_UNREACH_FILTER_PROHIB 13
|
58
|
+
#endif
|
59
|
+
#ifndef ICMP_UNREACH_HOST_PRECEDENCE
|
60
|
+
#define ICMP_UNREACH_HOST_PRECEDENCE 14
|
61
|
+
#endif
|
62
|
+
#ifndef ICMP_UNREACH_PRECEDENCE_CUTOFF
|
63
|
+
#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15
|
64
|
+
#endif
|
65
|
+
|
66
|
+
#ifndef ICMP_PARAMPROB_OPTABSENT
|
67
|
+
#define ICMP_PARAMPROB_OPTABSENT 1
|
68
|
+
#endif
|
69
|
+
|
70
|
+
#define ICMP_HDR(pkt) ((struct icmp *)LAYER4_HDR(pkt))
|
71
|
+
#define ICMP_DATA(pkt) ((u_char *)LAYER5_HDR(pkt))
|
72
|
+
#define ICMP_DATALEN(pkt) \
|
73
|
+
(ntohs(IP_HDR(pkt)->ip_len) - (IP_HDR(pkt)->ip_hl * 4 + 8))
|
74
|
+
#define ICMP_CAPLEN(pkt) (pkt->hdr.pkthdr.caplen - pkt->hdr.layer4_off)
|
75
|
+
|
76
|
+
VALUE cICMPPacket;
|
77
|
+
|
78
|
+
#define CheckTruncateICMP(pkt, need) \
|
79
|
+
CheckTruncate(pkt, pkt->hdr.layer4_off, need, "truncated ICMP")
|
80
|
+
|
81
|
+
struct icmp_type_info {
|
82
|
+
char *name;
|
83
|
+
VALUE klass;
|
84
|
+
};
|
85
|
+
static struct icmp_type_info icmp_types[] = {
|
86
|
+
{/* 0 */ "echo reply" },
|
87
|
+
{},{},
|
88
|
+
{/* 3 */ "unreachable" },
|
89
|
+
{/* 4 */ "source quench" },
|
90
|
+
{/* 5 */ "redirect" },
|
91
|
+
{},{},
|
92
|
+
{/* 8 */ "echo request" },
|
93
|
+
{/* 9 */ "router advertisement" },
|
94
|
+
{/* 10 */ "router solicitation" },
|
95
|
+
{/* 11 */ "time exceeded" },
|
96
|
+
{/* 12 */ "parameter problem" },
|
97
|
+
{/* 13 */ "time stamp request" },
|
98
|
+
{/* 14 */ "time stamp reply" },
|
99
|
+
{/* 15 */ "information request" },
|
100
|
+
{/* 16 */ "information reply" },
|
101
|
+
{/* 17 */ "address mask request" },
|
102
|
+
{/* 18 */ "address mask reply" },
|
103
|
+
{},{},{},{},{},{},{},{},{},{},{},
|
104
|
+
{/* 30 */ "traceroute" },
|
105
|
+
{},{},{},{},{},{},
|
106
|
+
{/* 37 */ "domain name request" },
|
107
|
+
{/* 38 */ "domain name reply" }
|
108
|
+
#define ICMP_TYPE_MAX 38
|
109
|
+
};
|
110
|
+
|
111
|
+
VALUE
|
112
|
+
setup_icmp_packet(pkt, tl_len)
|
113
|
+
struct packet_object *pkt;
|
114
|
+
int tl_len;
|
115
|
+
{
|
116
|
+
VALUE klass = cICMPPacket;
|
117
|
+
|
118
|
+
if (tl_len >= 1) {
|
119
|
+
struct icmp *icmp = ICMP_HDR(pkt);
|
120
|
+
if (icmp->icmp_type <= ICMP_TYPE_MAX
|
121
|
+
&& icmp_types[icmp->icmp_type].klass) {
|
122
|
+
klass = icmp_types[icmp->icmp_type].klass;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
return klass;
|
126
|
+
}
|
127
|
+
|
128
|
+
|
129
|
+
#define ICMPP_METHOD(func, need, val) \
|
130
|
+
static VALUE\
|
131
|
+
(func)(self)\
|
132
|
+
VALUE self;\
|
133
|
+
{\
|
134
|
+
struct packet_object *pkt;\
|
135
|
+
struct icmp *icmp;\
|
136
|
+
GetPacket(self, pkt);\
|
137
|
+
CheckTruncateICMP(pkt, (need));\
|
138
|
+
icmp = ICMP_HDR(pkt);\
|
139
|
+
return (val);\
|
140
|
+
}
|
141
|
+
|
142
|
+
/*
|
143
|
+
* Common methods (icmp_type independent)
|
144
|
+
*/
|
145
|
+
|
146
|
+
ICMPP_METHOD(icmpp_type, 1, INT2FIX(icmp->icmp_type))
|
147
|
+
ICMPP_METHOD(icmpp_code, 2, INT2FIX(icmp->icmp_code))
|
148
|
+
ICMPP_METHOD(icmpp_cksum, 4, INT2FIX(ntohs(icmp->icmp_cksum)))
|
149
|
+
ICMPP_METHOD(icmpp_typestr, 1,
|
150
|
+
(icmp->icmp_type <= ICMP_TYPE_MAX
|
151
|
+
&&icmp_types[icmp->icmp_type].name)
|
152
|
+
? rb_str_new2(icmp_types[icmp->icmp_type].name)
|
153
|
+
: rb_obj_as_string(INT2FIX(icmp->icmp_type)))
|
154
|
+
|
155
|
+
|
156
|
+
/*
|
157
|
+
* icmp_type specific methods
|
158
|
+
*/
|
159
|
+
|
160
|
+
ICMPP_METHOD(icmpp_pptr, 5, INT2FIX(icmp->icmp_pptr))
|
161
|
+
ICMPP_METHOD(icmpp_gwaddr, 8, new_ipaddr(&icmp->icmp_gwaddr))
|
162
|
+
ICMPP_METHOD(icmpp_id, 6, INT2FIX(ntohs(icmp->icmp_id)))
|
163
|
+
ICMPP_METHOD(icmpp_seq, 8, INT2FIX(ntohs(icmp->icmp_seq)))
|
164
|
+
#ifdef WORDS_BIGENDIAN
|
165
|
+
ICMPP_METHOD(icmpp_seqle, 8, INT2FIX(((0x00ff&icmp->icmp_seq)<<8) +
|
166
|
+
(icmp->icmp_seq >> 8)))
|
167
|
+
#else
|
168
|
+
ICMPP_METHOD(icmpp_seqle, 8, INT2FIX(icmp->icmp_seq))
|
169
|
+
#endif
|
170
|
+
|
171
|
+
/* rfc1191 */
|
172
|
+
struct mtu_discovery {
|
173
|
+
u_short unused;
|
174
|
+
u_short nextmtu;
|
175
|
+
};
|
176
|
+
#define MTUD(icmp) ((struct mtu_discovery *)&icmp->icmp_void)
|
177
|
+
|
178
|
+
static VALUE
|
179
|
+
icmpp_nextmtu(self)
|
180
|
+
VALUE self;
|
181
|
+
{
|
182
|
+
struct packet_object *pkt;
|
183
|
+
struct icmp *icmp;
|
184
|
+
|
185
|
+
GetPacket(self, pkt);
|
186
|
+
CheckTruncateICMP(pkt, 8);
|
187
|
+
icmp = ICMP_HDR(pkt);
|
188
|
+
|
189
|
+
if (icmp->icmp_code != ICMP_UNREACH_NEEDFRAG)
|
190
|
+
rb_raise(rb_eRuntimeError, "not ICMP_UNREACH_NEEDFRAG");
|
191
|
+
return INT2FIX(ntohs(MTUD(icmp)->nextmtu));
|
192
|
+
}
|
193
|
+
|
194
|
+
/* rfc1256 */
|
195
|
+
struct ih_rdiscovery {
|
196
|
+
u_char num_addrs;
|
197
|
+
u_char wpa;
|
198
|
+
u_short lifetime;
|
199
|
+
};
|
200
|
+
#define IHRD(icmp) ((struct ih_rdiscovery *)&icmp->icmp_void)
|
201
|
+
|
202
|
+
struct id_rdiscovery {
|
203
|
+
struct in_addr ird_addr;
|
204
|
+
long ird_pref;
|
205
|
+
};
|
206
|
+
#define IDRD(icmp) ((struct id_rdiscovery *)icmp->icmp_data)
|
207
|
+
|
208
|
+
ICMPP_METHOD(icmpp_num_addrs, 5, INT2FIX(IHRD(icmp)->num_addrs))
|
209
|
+
ICMPP_METHOD(icmpp_wpa, 6, INT2FIX(IHRD(icmp)->wpa))
|
210
|
+
ICMPP_METHOD(icmpp_lifetime, 8, INT2FIX(ntohs(IHRD(icmp)->lifetime)))
|
211
|
+
|
212
|
+
static VALUE
|
213
|
+
icmpp_radv(self, ind)
|
214
|
+
VALUE self, ind;
|
215
|
+
{
|
216
|
+
struct packet_object *pkt;
|
217
|
+
struct icmp *icmp;
|
218
|
+
int i = NUM2INT(ind);
|
219
|
+
VALUE ary;
|
220
|
+
|
221
|
+
GetPacket(self, pkt);
|
222
|
+
CheckTruncateICMP(pkt, 5);
|
223
|
+
if (i > IHRD(icmp)->num_addrs)
|
224
|
+
rb_raise(rb_eRuntimeError, "num_addrs = %d, requested radv(%d)",
|
225
|
+
(int)IHRD(icmp)->num_addrs, i);
|
226
|
+
|
227
|
+
CheckTruncateICMP(pkt, 8 + i*8);
|
228
|
+
icmp = ICMP_HDR(pkt);
|
229
|
+
|
230
|
+
ary = rb_ary_new();
|
231
|
+
rb_ary_push(ary, new_ipaddr(&IDRD(icmp)->ird_addr));
|
232
|
+
rb_ary_push(ary, INT2NUM(ntohl(IDRD(icmp)->ird_pref)));
|
233
|
+
return ary;
|
234
|
+
}
|
235
|
+
|
236
|
+
#define time_new_msec(t) rb_time_new((t)/1000, (t)%1000 * 1000)
|
237
|
+
ICMPP_METHOD(icmpp_otime, 12, time_new_msec(ntohl(icmp->icmp_otime)))
|
238
|
+
ICMPP_METHOD(icmpp_rtime, 16, time_new_msec(ntohl(icmp->icmp_rtime)))
|
239
|
+
ICMPP_METHOD(icmpp_ttime, 20, time_new_msec(ntohl(icmp->icmp_ttime)))
|
240
|
+
|
241
|
+
static VALUE
|
242
|
+
icmpp_ip(self)
|
243
|
+
VALUE self;
|
244
|
+
{
|
245
|
+
struct packet_object *pkt;
|
246
|
+
struct icmp *icmp;
|
247
|
+
struct pcap_pkthdr pkthdr;
|
248
|
+
|
249
|
+
GetPacket(self, pkt);
|
250
|
+
CheckTruncateICMP(pkt, 9);
|
251
|
+
icmp = ICMP_HDR(pkt);
|
252
|
+
|
253
|
+
pkthdr.caplen = ICMP_CAPLEN(pkt) - 8;
|
254
|
+
pkthdr.len = 0;
|
255
|
+
pkthdr.ts.tv_sec = 0;
|
256
|
+
pkthdr.ts.tv_usec = 0;
|
257
|
+
return new_packet((char *)&icmp->icmp_ip, &pkthdr, DLT_RAW);
|
258
|
+
}
|
259
|
+
|
260
|
+
ICMPP_METHOD(icmpp_mask, 12, UINT32_2_NUM(ntohl(icmp->icmp_mask)))
|
261
|
+
ICMPP_METHOD(icmpp_data, 9, rb_str_new(icmp->icmp_data, ICMP_CAPLEN(pkt)-8))
|
262
|
+
|
263
|
+
/* rfc1393 */
|
264
|
+
struct traceroute {
|
265
|
+
u_short ohc;
|
266
|
+
u_short rhc;
|
267
|
+
u_long lspeed;
|
268
|
+
u_long lmtu;
|
269
|
+
};
|
270
|
+
#define TROUTE(icmp) ((struct traceroute *)icmp->icmp_data)
|
271
|
+
ICMPP_METHOD(icmpp_ohc, 10, INT2FIX(ntohs(TROUTE(icmp)->ohc)))
|
272
|
+
ICMPP_METHOD(icmpp_rhc, 12, INT2FIX(ntohs(TROUTE(icmp)->rhc)))
|
273
|
+
ICMPP_METHOD(icmpp_lspeed, 16, UINT32_2_NUM(ntohl(TROUTE(icmp)->lspeed)))
|
274
|
+
ICMPP_METHOD(icmpp_lmtu, 20, UINT32_2_NUM(ntohl(TROUTE(icmp)->lmtu)))
|
275
|
+
|
276
|
+
/* rfc1788 */
|
277
|
+
struct domain_reply {
|
278
|
+
u_long ttl;
|
279
|
+
char names[1];
|
280
|
+
};
|
281
|
+
#define DOMAIN(icmp) ((struct domain_reply *)icmp->icmp_data)
|
282
|
+
ICMPP_METHOD(icmpp_ttl, 12, UINT32_2_NUM(ntohl(DOMAIN(icmp)->ttl)))
|
283
|
+
|
284
|
+
void
|
285
|
+
Init_icmp_packet(void)
|
286
|
+
{
|
287
|
+
VALUE klass;
|
288
|
+
|
289
|
+
rb_define_const(mPcap, "ICMP_ECHOREPLY", INT2NUM(ICMP_ECHOREPLY));
|
290
|
+
rb_define_const(mPcap, "ICMP_UNREACH", INT2NUM(ICMP_UNREACH));
|
291
|
+
rb_define_const(mPcap, "ICMP_SOURCEQUENCH",INT2NUM(ICMP_SOURCEQUENCH));
|
292
|
+
rb_define_const(mPcap, "ICMP_REDIRECT", INT2NUM(ICMP_REDIRECT));
|
293
|
+
rb_define_const(mPcap, "ICMP_ECHO", INT2NUM(ICMP_ECHO));
|
294
|
+
rb_define_const(mPcap, "ICMP_TIMXCEED", INT2NUM(ICMP_TIMXCEED));
|
295
|
+
rb_define_const(mPcap, "ICMP_PARAMPROB", INT2NUM(ICMP_PARAMPROB));
|
296
|
+
rb_define_const(mPcap, "ICMP_TSTAMP", INT2NUM(ICMP_TSTAMP));
|
297
|
+
rb_define_const(mPcap, "ICMP_TSTAMPREPLY", INT2NUM(ICMP_TSTAMPREPLY));
|
298
|
+
rb_define_const(mPcap, "ICMP_IREQ", INT2NUM(ICMP_IREQ));
|
299
|
+
rb_define_const(mPcap, "ICMP_IREQREPLY", INT2NUM(ICMP_IREQREPLY));
|
300
|
+
rb_define_const(mPcap, "ICMP_MASKREQ", INT2NUM(ICMP_MASKREQ));
|
301
|
+
rb_define_const(mPcap, "ICMP_MASKREPLY", INT2NUM(ICMP_MASKREPLY));
|
302
|
+
|
303
|
+
/* UNREACH codes */
|
304
|
+
rb_define_const(mPcap, "ICMP_UNREACH_NET", INT2NUM(ICMP_UNREACH_NET));
|
305
|
+
rb_define_const(mPcap, "ICMP_UNREACH_HOST", INT2NUM(ICMP_UNREACH_HOST));
|
306
|
+
rb_define_const(mPcap, "ICMP_UNREACH_PROTOCOL", INT2NUM(ICMP_UNREACH_PROTOCOL));
|
307
|
+
rb_define_const(mPcap, "ICMP_UNREACH_PORT", INT2NUM(ICMP_UNREACH_PORT));
|
308
|
+
rb_define_const(mPcap, "ICMP_UNREACH_NEEDFRAG", INT2NUM(ICMP_UNREACH_NEEDFRAG));
|
309
|
+
rb_define_const(mPcap, "ICMP_UNREACH_SRCFAIL", INT2NUM(ICMP_UNREACH_SRCFAIL));
|
310
|
+
rb_define_const(mPcap, "ICMP_UNREACH_NET_UNKNOWN", INT2NUM(ICMP_UNREACH_NET_UNKNOWN));
|
311
|
+
rb_define_const(mPcap, "ICMP_UNREACH_HOST_UNKNOWN", INT2NUM(ICMP_UNREACH_HOST_UNKNOWN));
|
312
|
+
rb_define_const(mPcap, "ICMP_UNREACH_ISOLATED", INT2NUM(ICMP_UNREACH_ISOLATED));
|
313
|
+
rb_define_const(mPcap, "ICMP_UNREACH_NET_PROHIB", INT2NUM(ICMP_UNREACH_NET_PROHIB));
|
314
|
+
rb_define_const(mPcap, "ICMP_UNREACH_HOST_PROHIB", INT2NUM(ICMP_UNREACH_HOST_PROHIB));
|
315
|
+
rb_define_const(mPcap, "ICMP_UNREACH_TOSNET", INT2NUM(ICMP_UNREACH_TOSNET));
|
316
|
+
rb_define_const(mPcap, "ICMP_UNREACH_TOSHOST", INT2NUM(ICMP_UNREACH_TOSHOST));
|
317
|
+
rb_define_const(mPcap, "ICMP_UNREACH_FILTER_PROHIB", INT2NUM(ICMP_UNREACH_FILTER_PROHIB));
|
318
|
+
rb_define_const(mPcap, "ICMP_UNREACH_HOST_PRECEDENCE", INT2NUM(ICMP_UNREACH_HOST_PRECEDENCE));
|
319
|
+
rb_define_const(mPcap, "ICMP_UNREACH_PRECEDENCE_CUTOFF", INT2NUM(ICMP_UNREACH_PRECEDENCE_CUTOFF));
|
320
|
+
|
321
|
+
/* REDIRECT codes */
|
322
|
+
rb_define_const(mPcap, "ICMP_REDIRECT_NET", INT2NUM(ICMP_REDIRECT_NET));
|
323
|
+
rb_define_const(mPcap, "ICMP_REDIRECT_HOST", INT2NUM(ICMP_REDIRECT_HOST));
|
324
|
+
rb_define_const(mPcap, "ICMP_REDIRECT_TOSNET", INT2NUM(ICMP_REDIRECT_TOSNET));
|
325
|
+
rb_define_const(mPcap, "ICMP_REDIRECT_TOSHOST", INT2NUM(ICMP_REDIRECT_TOSHOST));
|
326
|
+
|
327
|
+
/* TIMEXCEED codes */
|
328
|
+
rb_define_const(mPcap, "ICMP_TIMXCEED_INTRANS", INT2NUM(ICMP_TIMXCEED_INTRANS));
|
329
|
+
rb_define_const(mPcap, "ICMP_TIMXCEED_REASS", INT2NUM(ICMP_TIMXCEED_REASS));
|
330
|
+
|
331
|
+
/* PARAMPROB code */
|
332
|
+
rb_define_const(mPcap, "ICMP_PARAMPROB_OPTABSENT", INT2NUM(ICMP_PARAMPROB_OPTABSENT));
|
333
|
+
|
334
|
+
cICMPPacket = rb_define_class_under(mPcap, "ICMPPacket", cIPPacket);
|
335
|
+
rb_define_method(cICMPPacket, "icmp_type", icmpp_type, 0);
|
336
|
+
rb_define_method(cICMPPacket, "icmp_typestr", icmpp_typestr, 0);
|
337
|
+
rb_define_method(cICMPPacket, "icmp_code", icmpp_code, 0);
|
338
|
+
rb_define_method(cICMPPacket, "icmp_cksum", icmpp_cksum, 0);
|
339
|
+
|
340
|
+
klass = rb_define_class_under(mPcap, "ICMPEchoReply", cICMPPacket);
|
341
|
+
icmp_types[ICMP_ECHOREPLY].klass = klass;
|
342
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
343
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
344
|
+
rb_define_method(klass, "icmp_seqle", icmpp_seqle, 0);
|
345
|
+
rb_define_method(klass, "icmp_data", icmpp_data, 0);
|
346
|
+
|
347
|
+
klass = rb_define_class_under(mPcap, "ICMPUnreach", cICMPPacket);
|
348
|
+
icmp_types[ICMP_UNREACH].klass = klass;
|
349
|
+
rb_define_method(klass, "icmp_nextmtu", icmpp_nextmtu, 0);
|
350
|
+
rb_define_method(klass, "icmp_ip", icmpp_ip, 0);
|
351
|
+
|
352
|
+
klass = rb_define_class_under(mPcap, "ICMPSourceQuench", cICMPPacket);
|
353
|
+
icmp_types[ICMP_SOURCEQUENCH].klass = klass;
|
354
|
+
rb_define_method(klass, "icmp_ip", icmpp_ip, 0);
|
355
|
+
|
356
|
+
klass = rb_define_class_under(mPcap, "ICMPRedirect", cICMPPacket);
|
357
|
+
icmp_types[ICMP_REDIRECT].klass = klass;
|
358
|
+
rb_define_method(klass, "icmp_gwaddr", icmpp_gwaddr, 0);
|
359
|
+
rb_define_method(klass, "icmp_ip", icmpp_ip, 0);
|
360
|
+
|
361
|
+
klass = rb_define_class_under(mPcap, "ICMPEcho", cICMPPacket);
|
362
|
+
icmp_types[ICMP_ECHO].klass = klass;
|
363
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
364
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
365
|
+
rb_define_method(klass, "icmp_seqle", icmpp_seqle, 0);
|
366
|
+
rb_define_method(klass, "icmp_data", icmpp_data, 0);
|
367
|
+
|
368
|
+
klass = rb_define_class_under(mPcap, "ICMPRouterAdvert", cICMPPacket);
|
369
|
+
icmp_types[ICMP_ROUTERADVERT].klass = klass;
|
370
|
+
rb_define_method(klass, "icmp_num_addrs", icmpp_num_addrs, 0);
|
371
|
+
rb_define_method(klass, "icmp_wpa", icmpp_wpa, 0);
|
372
|
+
rb_define_method(klass, "icmp_lifetime", icmpp_lifetime, 0);
|
373
|
+
rb_define_method(klass, "icmp_radv", icmpp_radv, 1);
|
374
|
+
|
375
|
+
klass = rb_define_class_under(mPcap, "ICMPRouterSolicit", cICMPPacket);
|
376
|
+
icmp_types[ICMP_ROUTERSOLICIT].klass = klass;
|
377
|
+
|
378
|
+
klass = rb_define_class_under(mPcap, "ICMPTimxceed", cICMPPacket);
|
379
|
+
icmp_types[ICMP_TIMXCEED].klass = klass;
|
380
|
+
rb_define_method(klass, "icmp_ip", icmpp_ip, 0);
|
381
|
+
|
382
|
+
klass = rb_define_class_under(mPcap, "ICMPParamProb", cICMPPacket);
|
383
|
+
icmp_types[ICMP_PARAMPROB].klass = klass;
|
384
|
+
rb_define_method(klass, "icmp_pptr", icmpp_pptr, 0);
|
385
|
+
rb_define_method(klass, "icmp_ip", icmpp_ip, 0);
|
386
|
+
|
387
|
+
klass = rb_define_class_under(mPcap, "ICMPTStamp", cICMPPacket);
|
388
|
+
icmp_types[ICMP_TSTAMP].klass = klass;
|
389
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
390
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
391
|
+
rb_define_method(klass, "icmp_otime", icmpp_otime, 0);
|
392
|
+
rb_define_method(klass, "icmp_rtime", icmpp_rtime, 0);
|
393
|
+
rb_define_method(klass, "icmp_ttime", icmpp_ttime, 0);
|
394
|
+
|
395
|
+
klass = rb_define_class_under(mPcap, "ICMPTStampReply", cICMPPacket);
|
396
|
+
icmp_types[ICMP_TSTAMPREPLY].klass = klass;
|
397
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
398
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
399
|
+
rb_define_method(klass, "icmp_otime", icmpp_otime, 0);
|
400
|
+
rb_define_method(klass, "icmp_rtime", icmpp_rtime, 0);
|
401
|
+
rb_define_method(klass, "icmp_ttime", icmpp_ttime, 0);
|
402
|
+
|
403
|
+
klass = rb_define_class_under(mPcap, "ICMPIReq", cICMPPacket);
|
404
|
+
icmp_types[ICMP_IREQ].klass = klass;
|
405
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
406
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
407
|
+
|
408
|
+
klass = rb_define_class_under(mPcap, "ICMPIReqReply", cICMPPacket);
|
409
|
+
icmp_types[ICMP_IREQREPLY].klass = klass;
|
410
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
411
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
412
|
+
|
413
|
+
klass = rb_define_class_under(mPcap, "ICMPMaskReq", cICMPPacket);
|
414
|
+
icmp_types[ICMP_MASKREQ].klass = klass;
|
415
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
416
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
417
|
+
/*rb_define_method(klass, "icmp_mask", icmpp_mask, 0);*/
|
418
|
+
|
419
|
+
klass = rb_define_class_under(mPcap, "ICMPMaskReply", cICMPPacket);
|
420
|
+
icmp_types[ICMP_MASKREPLY].klass = klass;
|
421
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
422
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
423
|
+
/*rb_define_method(klass, "icmp_mask", icmpp_mask, 0);*/
|
424
|
+
|
425
|
+
klass = rb_define_class_under(mPcap, "ICMPTRoute", cICMPPacket);
|
426
|
+
icmp_types[ICMP_TROUTE].klass = klass;
|
427
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
428
|
+
rb_define_method(klass, "icmp_ohc", icmpp_ohc, 0);
|
429
|
+
rb_define_method(klass, "icmp_rhc", icmpp_rhc, 0);
|
430
|
+
rb_define_method(klass, "icmp_lspeed", icmpp_lspeed, 0);
|
431
|
+
rb_define_method(klass, "icmp_lmtu", icmpp_lmtu, 0);
|
432
|
+
|
433
|
+
klass = rb_define_class_under(mPcap, "ICMPDomain", cICMPPacket);
|
434
|
+
icmp_types[ICMP_DOMAIN].klass = klass;
|
435
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
436
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
437
|
+
|
438
|
+
klass = rb_define_class_under(mPcap, "ICMPDomainReply", cICMPPacket);
|
439
|
+
icmp_types[ICMP_DOMAINREPLY].klass = klass;
|
440
|
+
rb_define_method(klass, "icmp_id", icmpp_id, 0);
|
441
|
+
rb_define_method(klass, "icmp_seq", icmpp_seq, 0);
|
442
|
+
rb_define_method(klass, "icmp_ttl", icmpp_ttl, 0);
|
443
|
+
/*rb_define_method(klass, "icmp_names", icmpp_names, 0);*/
|
444
|
+
}
|