Subversion Repositories Kolibri OS

Rev

Rev 3618 | Rev 4737 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3618 Rev 3641
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                                 ;;
2
;;                                                                 ;;
3
;; Copyright (C) KolibriOS team 2010-2013. All rights reserved.    ;;
3
;; Copyright (C) KolibriOS team 2010-2013. All rights reserved.    ;;
4
;; Distributed under terms of the GNU General Public License       ;;
4
;; Distributed under terms of the GNU General Public License       ;;
5
;;                                                                 ;;
5
;;                                                                 ;;
6
;;  netstat.asm - Network Status Tool for KolibriOS                ;;
6
;;  netstat.asm - Network Status Tool for KolibriOS                ;;
7
;;                                                                 ;;
7
;;                                                                 ;;
8
;;  Written by hidnplayr@kolibrios.org                             ;;
8
;;  Written by hidnplayr@kolibrios.org                             ;;
9
;;                                                                 ;;
9
;;                                                                 ;;
10
;;          GNU GENERAL PUBLIC LICENSE                             ;;
10
;;          GNU GENERAL PUBLIC LICENSE                             ;;
11
;;             Version 2, June 1991                                ;;
11
;;             Version 2, June 1991                                ;;
12
;;                                                                 ;;
12
;;                                                                 ;;
13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
14
 
14
 
15
format binary as ""
15
format binary as ""
16
 
16
 
17
use32
17
use32
18
 
18
 
19
        org    0x0
19
        org    0x0
20
 
20
 
21
        db     'MENUET01'       ; 8 byte id
21
        db     'MENUET01'       ; 8 byte id
22
        dd     0x01             ; header version
22
        dd     0x01             ; header version
23
        dd     START            ; start of code
23
        dd     START            ; start of code
24
        dd     I_END            ; size of image
24
        dd     I_END            ; size of image
25
        dd     (I_END+0x1000)   ; memory for app
25
        dd     (I_END+0x1000)   ; memory for app
26
        dd     (I_END+0x1000)   ; esp
26
        dd     (I_END+0x1000)   ; esp
27
        dd     0, 0             ; I_Param , I_Path
27
        dd     0, 0             ; I_Param , I_Path
28
 
28
 
29
include '../../macros.inc'
29
include '../../macros.inc'
30
include '../../network.inc'
30
include '../../network.inc'
31
 
31
 
32
START:
32
START:
33
        mcall   40, EVM_REDRAW + EVM_BUTTON + EVM_STACK2
33
        mcall   40, EVM_REDRAW + EVM_BUTTON + EVM_STACK2
34
 
34
 
35
redraw:
35
redraw:
36
        mcall   12, 1
36
        mcall   12, 1
37
        mcall   0, 100 shl 16 + 600, 100 shl 16 + 240, 0x34bcbcbc, , name       ; draw window
37
        mcall   0, 100 shl 16 + 600, 100 shl 16 + 240, 0x34bcbcbc, , name       ; draw window
38
 
38
 
39
        call    draw_interfaces
39
        call    draw_interfaces
40
 
40
 
41
        xor     ebx, ebx
41
        xor     ebx, ebx
42
        mov     bh, [device]
42
        mov     bh, [device]
43
        mcall   74
43
        mcall   74
44
        mov     [device_type], eax
44
        mov     [device_type], eax
45
 
45
 
46
        mov     edx, 101
46
        mov     edx, 101
47
        mov     esi, 0x00aaaaff
47
        mov     esi, 0x00aaaaff
48
        mov     edi, 0x00aaffff
48
        mov     edi, 0x00aaffff
49
 
49
 
50
        cmp     dl, [mode]
50
        cmp     dl, [mode]
51
        cmove   esi, edi
51
        cmove   esi, edi
52
        mcall   8, 5 shl 16 + 55, 5 shl 16 + 20
52
        mcall   8, 5 shl 16 + 55, 5 shl 16 + 20
53
  .morebuttons:
53
  .morebuttons:
54
        inc     edx
54
        inc     edx
55
        add     ebx, 60 shl 16
55
        add     ebx, 60 shl 16
56
        mov     esi, 0x00aaaaff
56
        mov     esi, 0x00aaaaff
57
 
57
 
58
        cmp     dl, [mode]
58
        cmp     dl, [mode]
59
        cmove   esi, edi
59
        cmove   esi, edi
60
        mcall
60
        mcall
61
 
61
 
62
        cmp     edx, 105
62
        cmp     edx, 105
63
        jle     .morebuttons
63
        jle     .morebuttons
64
 
64
 
65
        mcall   4, 8 shl 16 + 11, 0x80000000, modes
65
        mcall   4, 8 shl 16 + 11, 0x80000000, modes
66
 
66
 
67
        cmp     [mode], 101
67
        cmp     [mode], 101
68
        jne     .no_eth
68
        jne     .no_eth
69
 
69
 
70
        mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
70
        mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
71
        add     ebx, 18
71
        add     ebx, 18
72
        mov     edx, str_packets_rx
72
        mov     edx, str_packets_rx
73
        mcall
73
        mcall
74
        add     ebx, 18
74
        add     ebx, 18
75
        mov     edx, str_bytes_tx
75
        mov     edx, str_bytes_tx
76
        mcall
76
        mcall
77
        add     ebx, 18
77
        add     ebx, 18
78
        mov     edx, str_bytes_rx
78
        mov     edx, str_bytes_rx
79
        mcall
79
        mcall
80
        add     ebx, 18
80
        add     ebx, 18
81
        mov     edx, str_link
81
        mov     edx, str_link
82
        mcall
82
        mcall
83
 
83
 
84
        cmp     [device_type], 1
84
        cmp     [device_type], 1
85
        jne     end_of_draw
85
        jne     end_of_draw
86
 
86
 
87
        add     ebx, 18
87
        add     ebx, 18
88
        mov     edx, str_MAC
88
        mov     edx, str_MAC
89
        mcall
89
        mcall
90
 
90
 
91
        mov     ebx, API_ETH
91
        mov     ebx, API_ETH
92
        mov     bh, [device]
92
        mov     bh, [device]
93
        mcall   76
93
        mcall   76
94
        push    eax
94
        push    eax
95
        push    bx
95
        push    bx
96
 
96
 
97
        mov     edx, 135 shl 16 + 35 + 5*18
97
        mov     edx, 135 shl 16 + 35 + 5*18
98
        call    draw_mac
98
        call    draw_mac
99
        jmp     end_of_draw
99
        jmp     end_of_draw
100
 
100
 
101
 .no_eth:
101
 .no_eth:
102
 
102
 
103
        cmp     [mode], 102
103
        cmp     [mode], 102
104
        jne     .no_ip
104
        jne     .no_ip
105
 
105
 
106
        mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
106
        mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
107
        add     ebx, 18
107
        add     ebx, 18
108
        mov     edx, str_packets_rx
108
        mov     edx, str_packets_rx
109
        mcall
109
        mcall
110
        add     ebx, 18
110
        add     ebx, 18
111
        mov     edx, str_ip
111
        mov     edx, str_ip
112
        mcall
112
        mcall
113
        add     ebx, 18
113
        add     ebx, 18
114
        mov     edx, str_dns
114
        mov     edx, str_dns
115
        mcall
115
        mcall
116
        add     ebx, 18
116
        add     ebx, 18
117
        mov     edx, str_subnet
117
        mov     edx, str_subnet
118
        mcall
118
        mcall
119
        add     ebx, 18
119
        add     ebx, 18
120
        mov     edx, str_gateway
120
        mov     edx, str_gateway
121
        mcall
121
        mcall
122
 
122
 
123
 
123
 
124
        mov     ebx, API_IPv4 + 8
124
        mov     ebx, API_IPv4 + 8
125
        mov     bh, [device]
125
        mov     bh, [device]
126
        mcall   76
126
        mcall   76
127
        push    eax
127
        push    eax
128
 
128
 
129
        dec     bl
129
        dec     bl
130
        dec     bl
130
        dec     bl
131
        mcall   76
131
        mcall   76
132
        push    eax
132
        push    eax
133
 
133
 
134
        dec     bl
134
        dec     bl
135
        dec     bl
135
        dec     bl
136
        mcall   76
136
        mcall   76
137
        push    eax
137
        push    eax
138
 
138
 
139
        dec     bl
139
        dec     bl
140
        dec     bl
140
        dec     bl
141
        mcall   76
141
        mcall   76
142
        push    eax
142
        push    eax
143
 
143
 
144
        mov     edx, 135 shl 16 + 35 + 2*18
144
        mov     edx, 135 shl 16 + 35 + 2*18
145
        call    draw_ip
145
        call    draw_ip
146
 
146
 
147
        add     edx, 18
147
        add     edx, 18
148
        call    draw_ip
148
        call    draw_ip
149
 
149
 
150
        add     edx, 18
150
        add     edx, 18
151
        call    draw_ip
151
        call    draw_ip
152
 
152
 
153
        add     edx, 18
153
        add     edx, 18
154
        call    draw_ip
154
        call    draw_ip
155
 
155
 
156
        jmp     end_of_draw
156
        jmp     end_of_draw
157
 
157
 
158
 .no_ip:
158
 .no_ip:
159
 
159
 
160
        cmp     [mode], 103
160
        cmp     [mode], 103
161
        jne     .no_arp
161
        jne     .no_arp
162
 
162
 
163
        mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
163
        mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
164
        add     ebx, 18
164
        add     ebx, 18
165
        mov     edx, str_packets_rx
165
        mov     edx, str_packets_rx
166
        mcall
166
        mcall
167
        add     ebx, 18
167
        add     ebx, 18
168
        mov     edx, str_arp
168
        mov     edx, str_arp
169
        mcall
169
        mcall
170
        add     ebx, 18
170
        add     ebx, 18
171
        mov     edx, str_conflicts
171
        mov     edx, str_conflicts
172
        mcall
172
        mcall
173
 
173
 
174
        mcall   4, 8 shl 16 + 130, 0x80000000, str_ARP_legend
174
        mcall   4, 8 shl 16 + 130, 0x80000000, str_ARP_legend
175
 
175
 
176
        jmp     end_of_draw
176
        jmp     end_of_draw
177
 
177
 
178
 .no_arp:
178
 .no_arp:
179
 
179
 
180
        mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
180
        mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
181
 
181
 
182
        add     ebx, 18
182
        add     ebx, 18
183
        mov     edx, str_packets_rx
183
        mov     edx, str_packets_rx
184
        mcall
184
        mcall
185
 
185
 
186
        cmp     [mode], 106
186
        cmp     [mode], 106
187
        jne     end_of_draw
187
        jne     end_of_draw
188
 
188
 
189
        add     ebx, 18
189
        add     ebx, 18
190
        mov     edx, str_missed
190
        mov     edx, str_missed
191
        mcall
191
        mcall
192
 
192
 
193
        add     ebx, 18
193
        add     ebx, 18
194
        mov     edx, str_dumped
194
        mov     edx, str_dumped
195
        mcall
195
        mcall
196
 
196
 
197
 
197
 
198
 
198
 
199
end_of_draw:
199
end_of_draw:
200
        mcall   12, 2
200
        mcall   12, 2
201
 
201
 
202
draw_stats:
202
draw_stats:
203
 
203
 
204
        cmp     [mode], 101
204
        cmp     [mode], 101
205
        jne     not_101
205
        jne     not_101
206
 
206
 
207
        mov     ebx, API_ETH
207
        mov     ebx, API_ETH
208
        mov     bh, [device]
208
        mov     bh, [device]
209
        mov     bl, 6
209
        mov     bl, 6
210
  @@:
210
  @@:
211
        push    ebx
211
        push    ebx
212
        mcall   74
212
        mcall   74
213
        pop     ebx
213
        pop     ebx
214
        push    eax
214
        push    eax
215
        inc     bl
215
        inc     bl
216
        cmp     bl, 10
216
        cmp     bl, 10
217
        jbe     @r
217
        jbe     @r
218
 
218
 
219
        mov     ebx, 0x000a0000
219
        mov     ebx, 0x000a0000
220
        pop     ecx
220
        pop     ecx
221
        mov     edx, 135 shl 16 + 35 + 4*18
221
        mov     edx, 135 shl 16 + 35 + 4*18
222
        mov     esi, 0x40000000
222
        mov     esi, 0x40000000
223
        mov     edi, 0x00bcbcbc
223
        mov     edi, 0x00bcbcbc
224
        mcall   47
224
        mcall   47
225
 
225
 
226
        sub     edx, 18
226
        sub     edx, 18
227
        pop     ecx
227
        pop     ecx
228
        mcall
228
        mcall
229
 
229
 
230
        sub     edx, 18
230
        sub     edx, 18
231
        pop     ecx
231
        pop     ecx
232
        mcall
232
        mcall
233
 
233
 
234
        sub     edx, 18
234
        sub     edx, 18
235
        pop     ecx
235
        pop     ecx
236
        mcall
236
        mcall
237
 
237
 
238
        sub     edx, 18
238
        sub     edx, 18
239
        pop     ecx
239
        pop     ecx
240
        mcall
240
        mcall
241
 
241
 
242
        jmp     mainloop
242
        jmp     mainloop
243
 
243
 
244
 
244
 
245
not_101:
245
not_101:
246
 
246
 
247
        cmp     [mode], 102
247
        cmp     [mode], 102
248
        jne     not_102
248
        jne     not_102
249
 
249
 
250
        mov     ebx, API_IPv4
250
        mov     ebx, API_IPv4
251
        mov     bh, [device]
251
        mov     bh, [device]
252
        push    ebx
252
        push    ebx
253
        mcall   76
253
        mcall   76
254
        pop     ebx
254
        pop     ebx
255
        push    eax
255
        push    eax
256
 
256
 
257
        inc     bl
257
        inc     bl
258
        push    ebx
258
        push    ebx
259
        mcall   76
259
        mcall   76
260
        pop     ebx
260
        pop     ebx
261
        push    eax
261
        push    eax
262
 
262
 
263
 
263
 
264
        mov     ebx, 0x000a0000
264
        mov     ebx, 0x000a0000
265
        pop     ecx
265
        pop     ecx
266
        mov     edx, 135 shl 16 + 35 + 18
266
        mov     edx, 135 shl 16 + 35 + 18
267
        mov     esi, 0x40000000
267
        mov     esi, 0x40000000
268
        mov     edi, 0x00bcbcbc
268
        mov     edi, 0x00bcbcbc
269
        mcall   47
269
        mcall   47
270
 
270
 
271
        sub     edx, 18
271
        sub     edx, 18
272
        pop     ecx
272
        pop     ecx
273
        mcall
273
        mcall
274
 
274
 
275
        jmp     mainloop
275
        jmp     mainloop
276
 
276
 
277
 
277
 
278
not_102:
278
not_102:
279
 
279
 
280
        cmp     [mode], 103
280
        cmp     [mode], 103
281
        jne     not_103
281
        jne     not_103
282
 
282
 
283
        mov     ebx, API_ARP
283
        mov     ebx, API_ARP
284
        mov     bh, [device]
284
        mov     bh, [device]
285
        push    ebx
285
        push    ebx
286
        mcall   76
286
        mcall   76      ; tx
287
        pop     ebx
287
        pop     ebx
288
        push    eax
288
        push    eax
289
 
289
 
290
        inc     bl
290
        inc     bl
291
        push    ebx
291
        push    ebx
292
        mcall   76
292
        mcall   76      ; rx
293
        pop     ebx
293
        pop     ebx
294
        push    eax
294
        push    eax
295
 
295
 
296
        inc     bl
296
        inc     bl
297
        push    ebx
297
        push    ebx
298
        mcall   76
298
        mcall   76      ; entries
299
        pop     ebx
299
        pop     ebx
300
        push    eax
300
        push    eax
301
 
301
 
302
        mov     bl, 7
302
        mov     bl, 7
303
        push    ebx
303
        push    ebx
304
        mcall   76
304
        mcall   76
305
        pop     ebx
305
        pop     ebx
306
        push    eax
306
        push    eax
307
 
307
 
308
        mov     ebx, 0x000a0000
308
        mov     ebx, 0x000a0000
309
        pop     ecx
309
        pop     ecx
310
        mov     edx, 135 shl 16 + 35 + 3*18
310
        mov     edx, 135 shl 16 + 35 + 3*18
311
        mov     esi, 0x40000000
311
        mov     esi, 0x40000000
312
        mov     edi, 0x00bcbcbc
312
        mov     edi, 0x00bcbcbc
313
        mcall   47
313
        mcall   47
314
 
314
 
315
        sub     edx, 18
315
        sub     edx, 18
316
        pop     ecx
316
        pop     ecx
317
        mcall
317
        mcall
318
 
318
 
319
        sub     edx, 18
319
        sub     edx, 18
320
        pop     ecx
320
        pop     ecx
321
        mcall
321
        mcall
322
 
322
 
323
        sub     edx, 18
323
        sub     edx, 18
324
        pop     ecx
324
        pop     ecx
325
        mcall
325
        mcall
326
 
326
 
327
;        mov     edx, 50 shl 16 + 150
327
;        mov     edx, 50 shl 16 + 150
328
        mov     [last], 0
328
        mov     [last], 0
329
 
329
 
330
  .arp_loop:
330
  .arp_loop:
331
        mov     ebx, API_ARP + 3
331
        mov     ebx, API_ARP + 3                ; read ARP entry
332
        mov     bh, [device]
332
        mov     bh, [device]
333
        mcall   76, , [last], , , arp_buf
333
        mcall   76, ,[last], , , arp_buf
334
        cmp     eax, -1
334
        cmp     eax, -1
335
        je      mainloop
335
        je      mainloop
-
 
336
 
-
 
337
        mov     ebx, [last]
-
 
338
        imul    ebx, 16
336
 
339
        add     ebx, 8 shl 16 + 140
337
        mcall   4, 20 shl 16 + 140, 0x80000000, str_ARP_entry
340
        mcall   4, , 0x80000000, str_ARP_entry
338
        mov     edx, ebx
341
        mov     edx, ebx
339
 
342
 
340
        mov     eax, 47
343
        mov     eax, 47
341
        mov     ebx, 0x00030000
344
        mov     ebx, 0x00030000
342
        mov     esi, 0x40000000
345
        mov     esi, 0x40000000
343
        mov     edi, 0x00bcbcbc
346
        mov     edi, 0x00bcbcbc
344
        xor     ecx, ecx
347
        xor     ecx, ecx
345
 
348
 
346
        mov     cl, byte[arp_buf.IP+0]
349
        mov     cl, byte[arp_buf.IP+0]
347
        mcall
350
        mcall
348
 
351
 
349
        mov     cl, byte[arp_buf.IP+1]
352
        mov     cl, byte[arp_buf.IP+1]
350
        add     edx, 24 shl 16
353
        add     edx, 24 shl 16
351
        mcall
354
        mcall
352
 
355
 
353
        mov     cl, byte[arp_buf.IP+2]
356
        mov     cl, byte[arp_buf.IP+2]
354
        add     edx, 24 shl 16
357
        add     edx, 24 shl 16
355
        mcall
358
        mcall
356
 
359
 
357
        mov     cl, byte[arp_buf.IP+3]
360
        mov     cl, byte[arp_buf.IP+3]
358
        add     edx, 24 shl 16
361
        add     edx, 24 shl 16
359
        mcall
362
        mcall
360
 
363
 
361
 
364
 
362
        mov     ebx, 0x00020100
365
        mov     ebx, 0x00020100
363
        mov     cl, byte[arp_buf.MAC+0]
366
        mov     cl, byte[arp_buf.MAC+0]
364
        add     edx, 36 shl 16
367
        add     edx, 36 shl 16
365
        mcall
368
        mcall
366
 
369
 
367
        mov     cl, byte[arp_buf.MAC+1]
370
        mov     cl, byte[arp_buf.MAC+1]
368
        add     edx, 18 shl 16
371
        add     edx, 18 shl 16
369
        mcall
372
        mcall
370
 
373
 
371
        mov     cl, byte[arp_buf.MAC+2]
374
        mov     cl, byte[arp_buf.MAC+2]
372
        add     edx, 18 shl 16
375
        add     edx, 18 shl 16
373
        mcall
376
        mcall
374
 
377
 
375
        mov     cl, byte[arp_buf.MAC+3]
378
        mov     cl, byte[arp_buf.MAC+3]
376
        add     edx, 18 shl 16
379
        add     edx, 18 shl 16
377
        mcall
380
        mcall
378
 
381
 
379
        mov     cl, byte[arp_buf.MAC+4]
382
        mov     cl, byte[arp_buf.MAC+4]
380
        add     edx, 18 shl 16
383
        add     edx, 18 shl 16
381
        mcall
384
        mcall
382
 
385
 
383
        mov     cl, byte[arp_buf.MAC+5]
386
        mov     cl, byte[arp_buf.MAC+5]
384
        add     edx, 18 shl 16
387
        add     edx, 18 shl 16
385
        mcall
388
        mcall
386
 
389
 
387
        mov     ebx, 0x00040000
390
        mov     ebx, 0x00040000
388
        mov     cx, [arp_buf.status]
391
        mov     cx, [arp_buf.status]
389
        add     edx, 30 shl 16
392
        add     edx, 30 shl 16
390
        mcall
393
        mcall
391
 
394
 
392
        mov     cx, [arp_buf.TTL]
395
        mov     cx, [arp_buf.TTL]
393
        add     edx, 60 shl 16
396
        add     edx, 60 shl 16
394
        mcall
397
        mcall
395
 
398
 
396
        add     dx, 18
399
        add     dx, 18
397
        rol     edx, 16
400
        rol     edx, 16
398
        mov     dx, 8
401
        mov     dx, 8
399
        rol     edx, 16
402
        rol     edx, 16
400
        inc     [last]
403
        inc     [last]
401
 
404
 
402
        jmp     .arp_loop
405
        jmp     .arp_loop
403
 
406
 
404
not_103:
407
not_103:
405
 
408
 
406
        cmp     [mode], 104
409
        cmp     [mode], 104
407
        jne     not_104
410
        jne     not_104
408
 
411
 
409
        mov     ebx, API_ICMP
412
        mov     ebx, API_ICMP
410
        mov     bh, [device]
413
        mov     bh, [device]
411
        push    ebx
414
        push    ebx
412
        mcall   76
415
        mcall   76
413
        pop     ebx
416
        pop     ebx
414
        push    eax
417
        push    eax
415
 
418
 
416
        inc     bl
419
        inc     bl
417
        push    ebx
420
        push    ebx
418
        mcall   76
421
        mcall   76
419
        pop     ebx
422
        pop     ebx
420
        push    eax
423
        push    eax
421
 
424
 
422
        mov     ebx, 0x000a0000
425
        mov     ebx, 0x000a0000
423
        pop     ecx
426
        pop     ecx
424
        mov     edx, 135 shl 16 + 35 + 18
427
        mov     edx, 135 shl 16 + 35 + 18
425
        mov     esi, 0x40000000
428
        mov     esi, 0x40000000
426
        mov     edi, 0x00bcbcbc
429
        mov     edi, 0x00bcbcbc
427
        mcall   47
430
        mcall   47
428
 
431
 
429
        sub     edx, 18
432
        sub     edx, 18
430
        pop     ecx
433
        pop     ecx
431
        mcall
434
        mcall
432
 
435
 
433
        jmp     mainloop
436
        jmp     mainloop
434
 
437
 
435
not_104:
438
not_104:
436
 
439
 
437
        cmp     [mode], 105
440
        cmp     [mode], 105
438
        jne     not_105
441
        jne     not_105
439
 
442
 
440
        mov     ebx, API_UDP
443
        mov     ebx, API_UDP
441
        mov     bh, [device]
444
        mov     bh, [device]
442
        push    ebx
445
        push    ebx
443
        mcall   76
446
        mcall   76
444
        pop     ebx
447
        pop     ebx
445
        push    eax
448
        push    eax
446
 
449
 
447
        inc     bl
450
        inc     bl
448
        push    ebx
451
        push    ebx
449
        mcall   76
452
        mcall   76
450
        pop     ebx
453
        pop     ebx
451
        push    eax
454
        push    eax
452
 
455
 
453
        mov     ebx, 0x000a0000
456
        mov     ebx, 0x000a0000
454
        pop     ecx
457
        pop     ecx
455
        mov     edx, 135 shl 16 + 35 + 18
458
        mov     edx, 135 shl 16 + 35 + 18
456
        mov     esi, 0x40000000
459
        mov     esi, 0x40000000
457
        mov     edi, 0x00bcbcbc
460
        mov     edi, 0x00bcbcbc
458
        mcall   47
461
        mcall   47
459
 
462
 
460
        sub     edx, 18
463
        sub     edx, 18
461
        pop     ecx
464
        pop     ecx
462
        mcall
465
        mcall
463
 
466
 
464
        jmp     mainloop
467
        jmp     mainloop
465
 
468
 
466
not_105:
469
not_105:
467
 
470
 
468
        cmp     [mode], 106
471
        cmp     [mode], 106
469
        jne     not_106
472
        jne     not_106
470
 
473
 
471
        mov     ebx, API_TCP
474
        mov     ebx, API_TCP
472
        mov     bh, [device]
475
        mov     bh, [device]
473
        push    ebx
476
        push    ebx
474
        mcall   76
477
        mcall   76
475
        pop     ebx
478
        pop     ebx
476
        push    eax
479
        push    eax
477
 
480
 
478
        inc     bl
481
        inc     bl
479
        push    ebx
482
        push    ebx
480
        mcall   76
483
        mcall   76
481
        pop     ebx
484
        pop     ebx
482
        push    eax
485
        push    eax
483
 
486
 
484
        inc     bl
487
        inc     bl
485
        push    ebx
488
        push    ebx
486
        mcall   76
489
        mcall   76
487
        pop     ebx
490
        pop     ebx
488
        push    eax
491
        push    eax
489
 
492
 
490
        inc     bl
493
        inc     bl
491
        push    ebx
494
        push    ebx
492
        mcall   76
495
        mcall   76
493
        pop     ebx
496
        pop     ebx
494
        push    eax
497
        push    eax
495
 
498
 
496
        mov     ebx, 0x000a0000
499
        mov     ebx, 0x000a0000
497
        pop     ecx
500
        pop     ecx
498
        mov     edx, 135 shl 16 + 35 + 18*3
501
        mov     edx, 135 shl 16 + 35 + 18*3
499
        mov     esi, 0x40000000
502
        mov     esi, 0x40000000
500
        mov     edi, 0x00bcbcbc
503
        mov     edi, 0x00bcbcbc
501
        mcall   47
504
        mcall   47
502
 
505
 
503
        sub     edx, 18
506
        sub     edx, 18
504
        pop     ecx
507
        pop     ecx
505
        mcall
508
        mcall
506
 
509
 
507
        sub     edx, 18
510
        sub     edx, 18
508
        pop     ecx
511
        pop     ecx
509
        mcall
512
        mcall
510
 
513
 
511
        sub     edx, 18
514
        sub     edx, 18
512
        pop     ecx
515
        pop     ecx
513
        mcall
516
        mcall
514
 
517
 
515
        jmp     mainloop
518
        jmp     mainloop
516
 
519
 
517
not_106:
520
not_106:
518
 
521
 
519
mainloop:
522
mainloop:
520
 
523
 
521
        mcall   23, 50          ; wait for event with timeout    (0,5 s)
524
        mcall   23, 50          ; wait for event with timeout    (0,5 s)
522
 
525
 
523
        cmp     eax, 1
526
        cmp     eax, 1
524
        je      redraw
527
        je      redraw
525
        cmp     eax, 3
528
        cmp     eax, 3
526
        je      button
529
        je      button
527
        cmp     eax, 11
530
        cmp     eax, 11
528
        je      redraw
531
        je      redraw
529
 
532
 
530
        jmp     draw_stats
533
        jmp     draw_stats
531
 
534
 
532
button:                         ; button
535
button:                         ; button
533
        mcall   17              ; get id
536
        mcall   17              ; get id
534
        cmp     ah, 1
537
        cmp     ah, 1
535
        je      exit
538
        je      exit
536
        cmp     ah, 0
539
        cmp     ah, 0
537
        je      .interface
540
        je      .interface
538
        mov     [mode], ah
541
        mov     [mode], ah
539
        jmp     redraw
542
        jmp     redraw
540
 
543
 
541
  .interface:
544
  .interface:
542
        shr     eax, 16
545
        shr     eax, 16
543
        mov     [device], al
546
        mov     [device], al
544
        jmp     redraw
547
        jmp     redraw
545
 
548
 
546
exit:
549
exit:
547
        mcall   -1
550
        mcall   -1
548
 
551
 
549
 
552
 
550
 
553
 
551
draw_mac:
554
draw_mac:
552
 
555
 
553
        mov     eax, 47
556
        mov     eax, 47
554
        mov     ebx, 0x00020100
557
        mov     ebx, 0x00020100
555
        mov     esi, 0x40000000
558
        mov     esi, 0x40000000
556
        mov     edi, 0x00bcbcbc
559
        mov     edi, 0x00bcbcbc
557
 
560
 
558
        mov     cl, [esp+4]
561
        mov     cl, [esp+4]
559
        mcall
562
        mcall
560
 
563
 
561
        mov     cl, [esp+4+1]
564
        mov     cl, [esp+4+1]
562
        add     edx, 15 shl 16
565
        add     edx, 15 shl 16
563
        mcall
566
        mcall
564
 
567
 
565
        mov     cl, [esp+4+2]
568
        mov     cl, [esp+4+2]
566
        add     edx, 15 shl 16
569
        add     edx, 15 shl 16
567
        mcall
570
        mcall
568
 
571
 
569
        mov     cl, [esp+4+3]
572
        mov     cl, [esp+4+3]
570
        add     edx, 15 shl 16
573
        add     edx, 15 shl 16
571
        mcall
574
        mcall
572
 
575
 
573
        mov     cl, [esp+4+4]
576
        mov     cl, [esp+4+4]
574
        add     edx, 15 shl 16
577
        add     edx, 15 shl 16
575
        mcall
578
        mcall
576
 
579
 
577
        mov     cl, [esp+4+5]
580
        mov     cl, [esp+4+5]
578
        add     edx, 15 shl 16
581
        add     edx, 15 shl 16
579
        mcall
582
        mcall
580
 
583
 
581
        sub     edx, 5*15 shl 16
584
        sub     edx, 5*15 shl 16
582
 
585
 
583
        ret     6
586
        ret     6
584
 
587
 
585
 
588
 
586
draw_ip:
589
draw_ip:
587
 
590
 
588
        mov     eax, 47
591
        mov     eax, 47
589
        mov     ebx, 0x00030000
592
        mov     ebx, 0x00030000
590
        mov     esi, 0x40000000
593
        mov     esi, 0x40000000
591
        mov     edi, 0x00bcbcbc
594
        mov     edi, 0x00bcbcbc
592
 
595
 
593
        xor     ecx, ecx
596
        xor     ecx, ecx
594
 
597
 
595
        mov     cl, [esp+4]
598
        mov     cl, [esp+4]
596
        mcall
599
        mcall
597
 
600
 
598
        mov     cl, [esp+4+1]
601
        mov     cl, [esp+4+1]
599
        add     edx, 30 shl 16
602
        add     edx, 30 shl 16
600
        mcall
603
        mcall
601
 
604
 
602
        mov     cl, [esp+4+2]
605
        mov     cl, [esp+4+2]
603
        add     edx, 30 shl 16
606
        add     edx, 30 shl 16
604
        mcall
607
        mcall
605
 
608
 
606
        mov     cl, [esp+4+3]
609
        mov     cl, [esp+4+3]
607
        add     edx, 30 shl 16
610
        add     edx, 30 shl 16
608
        mcall
611
        mcall
609
 
612
 
610
        sub     edx, 3*30 shl 16
613
        sub     edx, 3*30 shl 16
611
        ret     4
614
        ret     4
612
 
615
 
613
 
616
 
614
draw_interfaces:
617
draw_interfaces:
615
 
618
 
616
        mov     [.btnpos], 5 shl 16 + 20
619
        mov     [.btnpos], 5 shl 16 + 20
617
        mov     [.txtpos], 455 shl 16 + 12
620
        mov     [.txtpos], 455 shl 16 + 12
618
 
621
 
619
        mcall   74, -1          ; get number of active network devices
622
        mcall   74, -1          ; get number of active network devices
620
        mov     ecx, eax
623
        mov     ecx, eax
621
 
624
 
622
        xor     ebx, ebx        ; get device type
625
        xor     ebx, ebx        ; get device type
623
  .loop:
626
  .loop:
624
        mcall   74
627
        mcall   74
625
        cmp     eax, 1          ; loopback or ethernet?
628
        cmp     eax, 1          ; loopback or ethernet?
626
        jbe     .hit
629
        jbe     .hit
627
        inc     bh
630
        inc     bh
628
        jb      .loop           ; tried all 256?
631
        jb      .loop           ; tried all 256?
629
        ret
632
        ret
630
 
633
 
631
 
634
 
632
  .hit:
635
  .hit:
633
        push    ecx ebx
636
        push    ecx ebx
634
        movzx   edx, bh
637
        movzx   edx, bh
635
        shl     edx, 8
638
        shl     edx, 8
636
        mov     esi, 0x00aaaaff
639
        mov     esi, 0x00aaaaff
637
        cmp     bh, [device]
640
        cmp     bh, [device]
638
        cmove   esi, 0x00aaffff
641
        cmove   esi, 0x00aaffff
639
        mcall   8, 450 shl 16 + 135, [.btnpos]
642
        mcall   8, 450 shl 16 + 135, [.btnpos]
640
        mov     ebx, [esp]
643
        mov     ebx, [esp]
641
        inc     bl
644
        inc     bl
642
        mov     ecx, namebuf
645
        mov     ecx, namebuf
643
        mov     edx, namebuf
646
        mov     edx, namebuf
644
        mcall   74                              ; get device name
647
        mcall   74                              ; get device name
645
        cmp     eax, -1
648
        cmp     eax, -1
646
        jne     @f
649
        jne     @f
647
        mov     edx, str_unknown
650
        mov     edx, str_unknown
648
       @@:
651
       @@:
649
        mcall   4, [.txtpos], 0x80000000        ; print the name
652
        mcall   4, [.txtpos], 0x80000000        ; print the name
650
        pop     ebx ecx
653
        pop     ebx ecx
651
 
654
 
652
        inc     bh
655
        inc     bh
653
 
656
 
654
        add     [.btnpos], 25 shl 16
657
        add     [.btnpos], 25 shl 16
655
        add     [.txtpos], 25
658
        add     [.txtpos], 25
656
 
659
 
657
        dec     ecx
660
        dec     ecx
658
        jnz     .loop
661
        jnz     .loop
659
 
662
 
660
        ret
663
        ret
661
 
664
 
662
  .btnpos       dd ?
665
  .btnpos       dd ?
663
  .txtpos       dd ?
666
  .txtpos       dd ?
664
 
667
 
665
 
668
 
666
 
669
 
667
 
670
 
668
; DATA AREA
671
; DATA AREA
669
 
672
 
670
name            db 'Netstat', 0
673
name            db 'Netstat', 0
671
mode            db 101
674
mode            db 101
672
device          db 0
675
device          db 0
673
device_type     dd 0
676
device_type     dd 0
674
last            dd 0
677
last            dd 0
675
modes           db 'Physical    IPv4      ARP       ICMP      UDP       TCP', 0
678
modes           db 'Physical    IPv4      ARP       ICMP      UDP       TCP', 0
676
 
679
 
677
str_packets_tx  db 'Packets sent:', 0
680
str_packets_tx  db 'Packets sent:', 0
678
str_packets_rx  db 'Packets received:', 0
681
str_packets_rx  db 'Packets received:', 0
679
str_bytes_tx    db 'Bytes sent:', 0
682
str_bytes_tx    db 'Bytes sent:', 0
680
str_bytes_rx    db 'Bytes received:', 0
683
str_bytes_rx    db 'Bytes received:', 0
681
str_MAC         db 'MAC address:', 0
684
str_MAC         db 'MAC address:', 0
682
str_ip          db 'IP address:', 0
685
str_ip          db 'IP address:', 0
683
str_dns         db 'DNS address:', 0
686
str_dns         db 'DNS address:', 0
684
str_subnet      db 'Subnet mask:', 0
687
str_subnet      db 'Subnet mask:', 0
685
str_gateway     db 'Standard gateway:', 0
688
str_gateway     db 'Standard gateway:', 0
686
str_arp         db 'ARP entrys:', 0
689
str_arp         db 'ARP entrys:', 0
687
str_conflicts   db 'ARP conflicts:', 0
690
str_conflicts   db 'ARP conflicts:', 0
688
str_unknown     db 'unknown', 0
691
str_unknown     db 'unknown', 0
689
str_missed      db 'Packets missed:',0
692
str_missed      db 'Packets missed:',0
690
str_dumped      db 'Packets dumped:',0
693
str_dumped      db 'Packets dumped:',0
691
str_link        db 'Link state:',0
694
str_link        db 'Link state:',0
692
 
695
 
693
str_ARP_legend  db 'IP-address        MAC-address         Status    TTL', 0
696
str_ARP_legend  db 'IP-address        MAC-address         Status    TTL', 0
694
str_ARP_entry   db '   .   .   .        -  -  -  -  -                    s', 0
697
str_ARP_entry   db '   .   .   .        -  -  -  -  -                    s', 0
695
 
698
 
696
namebuf         rb 64
699
namebuf         rb 64
697
arp_buf         ARP_entry
700
arp_buf         ARP_entry
698
 
701
 
699
I_END:
702
I_END: