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
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
|
This is the readme to the Lan Information Server LISa and the Restricted LAN
Information Server resLISa.
+---------------+
| LISa |
+---------------+
LISa is intended to provide a kind of "network neighbourhood" but only
relying on the TCP/IP protocol stack, no smb or whatever.
It is completely independent from KDE/Qt.
The list of running hosts is provided via TCP port 7741.
LISa supports two ways of finding hosts:
1. you give LISa a range of of IP-addresses, then LISa will send
ICMP echo requests to all given IP addresses and wait for the answers
2. you can say LISa to execute "nmblookup "*" ", i.e. the command line tool
nmblookup must be installed, it is part of the samba package.
nmblookup "*" sends a broadcast to the attached networks and all hosts
running smb-services will answer this broadcast
lisa and reslisa are distributed under the GNU General Public License.
How it works
-------------
In the configuration file you provide a range of IP-addresses which
LISa should check, wether they are running. In the most simple case
this could be your network address/subnetmask, then LISa would
check every possible host of your network wether it is running.
The hosts are checked using ICMP echo requests. To be able to send and receive
ICMP echo requests and replies the program has to open a so-called
"raw socket". Therefor it needs root privileges. This socket is opened
right after the start of the program, after successfully opening the socket
root privileges are dropped immediately (see main.cpp and strictmain.cpp).
If you configure LISa this way, that it also uses nmblookup, it will
popen("nmblookup \"*\"") and then parse the results.
Since the ICMP requests and the broadcasts can cause some network traffic
if there are more than one such server running in one network, the servers
cooperate with each other. Before they start pinging (or nmblookup),
they send a broadcast on port 7741.
If somebody answers this broadcast, they will retrieve the complete list
of running hosts via TCP port 7741 from this host and will not start to
ping (or nmblookup) theirselves. If nobody answers, the host which sent
the broadcast will start pinging the hosts (or nmblookup) and then open a
socket which listens for the mentioned broadcasts. If the host received an
answer to his broadcast, it won't have the socket for listening to the
broadcasts open. So usually exactly one of the servers will have this
socket open and only this one will actually ping (or nmblookup) the hosts.
In other words, the servers are lazy, they work like "I will only do something
if nobody else can do it for me".
There is another feature which reduces the network load. Let's say you configured LISa
to update all 10 minutes. Now you don't access your server very often.
If nobody accesses the server for the last update period, the server will
update (either itself or from the one which actually does the work) and then
double its update period, i.e. the next update will happen after 20 minutes.
This will happen 4 times, so if nobody accesses the server with update period
10 minutes for a long time, its update interval will increase up to
160 minutes, almost three hours. If then somebody accesses the data from the
server, he will get an old list ( up to 160 minutes old). With accessing
the server will reset its update interval to its initial value,
i.e. 10 minutes and immediately start updating if the last update is more
than these 10 minutes over. This means if you get a very old list, you can try
some seconds later again and you should get a current version.
This will have fast effect for the servers, which don't ping (or nmblookup)
theirselves, since only one user usually accesses them, and it will have
less effect for the server which does the pinging (or nmblookup), since
this server is accessed from all other servers in the network.
This way it is possible that many hosts in a network run this server, but
the net load will remain low. For the user it is not necessary to know
wether there is a server (i.e. a name server or fileserver or whatever)
in the network which also runs LISa. He can always run LISa locally
and LISa will detect if there is one, transparently to the user.
The first client for LISa is an ioslave for KDE2, so the user
can enter there lan://localhost/ or lan:/, which will both
contact LISa on the own system.
If there is a machine which runs all the time and the user knows
that this machine also runs LISa, he can use his LISa client directly with
this server (would be with the mentioned ioslave lan://the_server_name/).
If you don't want that your LISa takes part in the broadcasting, but always
does the pinging itself, make it use another port with the
command line option --port or -p.
This is not recommended !
If you send SIGHUP to LISa, it will reread its configfile.
If you send SIGUSR1 to LISa, it will print some status information to stdout.
The data provided over the socket has a simple format:
<decimal ip address in network byte order><one space 0x20><full name of the host><a terminating '\0'><newline '\n'>
and the last line
0 succeeded<'\n'>
e.g.
"17302538 some_host.whatever.de
18285834 linux.whatever.de
17827082 nameserver.whatever.de
0 succeeded
"
This should make it easy parseable.
If there are very strict security rules in your network, some people
might consider the pinging a potential attack. If you
have problems with this, try the restricted version, resLISa.
+------------------+
| resLISa |
+------------------+
If you hav very strict security rules in your network or you don't want to
have another port open or whatever, you can use resLISa.
With resLISa you can't ping whole networks and address ranges, you can give
resLISa up to currently 64 hosts by their names in its config file. These
will be pinged. You are still able to use nmblookup.
resLISa will also only provide the information over a unix domain socket, i.e.
not over the network. The name of the socket is "/tmp/resLisa-YourLoginname",
so resLISa can be safely run by more users on one machine.
Since it should also not produce a security risk of any kind it is
safe to install reslisa setuid root. root privileges will be dropped
right after startup (see strictmain.cpp), they are only needed to create a raw socket
for sending the ICMP echo requests..
It will also not send or receive broadcasts.
The first client for this is also an ioslave for KDE2 (makes rlan:/ in e.g. konqy).
Configuration
-------------
Now an example config file:
PingAddresses = 192.168.100.0/255.255.255.0;192.168.100.10-192.168.199.19;192.168.200.1;192-192.168-168.100-199.0-9;
PingNames = bb_mail;
AllowedAddresses = 192.168.0.0/255.255.0.0
BroadcastNetwork = 192.168.100.0/255.255.255.0
SearchUsingNmblookup = 1 #also try nmblookup
FirstWait = 30 #30 hundredth seconds
SecondWait = -1 #only one try
#SecondWait = 60 #try twice, and the second time wait 0.6 seconds
UpdatePeriod = 300 #update after 300 secs
DeliverUnnamedHosts = 0 #don't publish hosts without name
MaxPingsAtOnce = 256 #send up to 256 ICMP echo requests at once
PingAddresses
This is probably the most important entry.
Here you say which addresses will be pinged. You can specify multiple
ranges, they are divided by semicolons.
There are four possible ways to define addresses:
-net address/network mask: 192.168.100.0/255.255.255.0, i.e. an IP address
and the assigned network mask. This doesn't have the real network address
and netmask of your machine, it can be less. E.g. if you have
10.0.0.0/255.0.0.0, you could specify 10.1.2.0/255.255.255.0 if you are only
interested in these addresses. The combination IP address-network mask
must be divided by a slash "/" and the address does not have to be a real
network address, it can also be a host address of the desired network,
i.e. 10.12.34.67/255.0.0.0 is the same as 10.0.0.0/255.0.0.0 .
-a range of following IP addresses: 192.168.100.10-192.168.199.19, i.e.
an IP-address where pinging will start and an IP-address where pinging will end.
Both addresses must be divided by a "-".
In this example this would produce 199-100+1=100, 100*256=25.600,
25.600+(19-10+1)=25.590 addresses
-an IP-address can be presented by its four decimal numbers, you can specify
ranges four each of these four numbers: 192-192.169-171.100-199.0-9
In this example all IP addresses with first number 192, second number from
168 to 168, third number from 100 up to 199 and last number from 0 up
to 9 will be pinged. This would give 1*1*100*10=1.000 addresses.
This is probably only useful in very seldom cases.
Here you have to provide ranges for every four numbers, always divided
by "-".
-single IP-addresses: 192.168.200.1
well, single IP addresses or host names
It is also valid to leave this entry empty.
PingNames
here you can additionally specify hosts to ping using their names.
The names have to be divided by semicolons.
It is also valid to leave this entry empty.
AllowedAddresses
This is also very important. LISa will only ping addresses,
accept clients and answer broadcasts from addresses, which are covered by the
addresses given in this line. You can add up to 32 network addresses/network masks
or single addresses. Divide them by ; and don't put empty space between the
addresses !
Example: 192.168.0.0/255.255.0.0;192.169.0.0
-> a complete network and a single address are valid
Always make this as strict as possible, usually
your network address/subnetmask is a good choice.
BroadcastNetwork
This entry contains exactly one network address/subnet mask.
To this network broadcasts will be sent. Usually this should be your
own network address/subnetmask.
Example: 192.168.0.0/255.255.0.0
SearchUsingNmblookup
Here you can give 0 or 1.
1 means that LISa will execute "nmblookup "*" " and parse the output
from this command. This produces less network traffic than the pinging,
but you will only get hosts which have a smb-service running (Windows
machines or machines running samba).
If you enable this option and also give IP addresses to ping, then nmblookup
will be executed first and then the pinging will start.
Then only addresses will be pinged, which were not already delivered
from nmblookup. This should slightly decrease the network load.
FirstWait
If LISa pings, i.e. if it sends the ICMP echo requests, it sends a bunch
of requests at once, and the it will wait for the number of hundredth seconds
you specify here. Usually values from 5 to 50 should be good, the maximum
is 99 (gives 0.99 seconds, a very long time).
Try to make this value as small as possible while still finding all
running hosts.
SecondWait
After LISa sent the echo requests the first time, it can be possible
that some hosts were not found. To improve the results, LISa can ping a
second time. This time it will only ping hosts, from which it didn't receive
answers. If you have good results with pinging only once, you can disable
the second time with setting SecondWait to -1.
Otherwise it might be a good idea to make this value a little bit bigger
than the value for FirstWait, since the hosts which were not found
on the first try, are probably slower or further away so they might take
some milliseconds longer to answer.
Usually values from 5 to 50 should be good or -1 to disable the second scan.
The maximum is 99 (gives 0.99 seconds, a very long time).
UpdatePeriod
This is the interval after which LISa will update, i.e. ping or nmblookup
or get the list of hosts from the LISa server which actually does the pinging.
Valid values are between 30 seconds and 1800 seconds (half an hour).
If you have a big network, don't make the interval to small (to keep
network load low). Values from 300 to 900 seconds (5 to 15 minutes) might be
a good idea. Keep in mind that the update period is doubled
if nobody accesses the server, up to 4 times, so the interval will become
16 times the value given here and will be reseted to the value given here
if somebody accesses the server.
DeliverUnnamedHosts
If an answer to an echo request from an IP address was received, were LISa
could not determine a name, it will be only delivered over the port
if you set this to 1.
I am not really sure if this is a useful feature, but maybe
there are some infrastructure devices in your network without assigned names,
so they don't have to be published. Set this to 0 if you want to keep them
secret ;-)
If unsure, say 0.
MaxPingsAtOnce
When sending the pings (echo requests), LISa sends a bunch of these at once
and then waits for the answers. By default there are 256 pings sent at once,
usually you should not need the change this value. If you make it much bigger,
the internal receive buffers for the answers to the echo requests may become to small,
if you make it to small, the updating will be slower.
Three different example config files:
You are member of a small network with 24 bit network mask, i.e.
up to 256 hosts:
PingAddresses = 192.168.100.0/255.255.255.0
AllowedAddresses = 192.168.100.0/255.255.255.0
BroadcastNetwork = 192.168.100.0/255.255.255.0
SearchUsingNmblookup = 0 #don't use nmblookup
FirstWait = 20 #20 hundredth seconds
SecondWait = 30 #30 hundredth seconds on the seconds try
UpdatePeriod = 300 #update after 300 secs
DeliverUnnamedHosts = 0 #don't publish hosts without name
You are only interested in hosts running smb services and you don't have
routers in your network:
AllowedAddresses = 192.168.100.0/255.255.255.0
BroadcastNetwork = 192.168.100.0/255.255.255.0
SearchUsingNmblookup = 1 #use nmblookup
UpdatePeriod = 300 #update after 300 secs
DeliverUnnamedHosts = 0 #don't publish hosts without name
The same network, but here both nmblookup and pinging is used.
PingAddresses = 192.168.100.0/255.255.255.0
PingNames = bb_mail
AllowedAddresses = 192.168.0.0/255.255.0.0
BroadcastNetwork = 192.168.100.0/255.255.255.0
SearchUsingNmblookup = 1 #also try nmblookup
FirstWait = 30 #30 hundredth seconds
SecondWait = -1 #only one try
#SecondWait = 60 #try twice, and the second time wait 0.6 seconds
UpdatePeriod = 300 #update after 300 secs
DeliverUnnamedHosts = 0 #don't publish hosts without name
MaxPingsAtOnce = 256 #send up to 256 ICMP echo requests at once
And now a configuration file for resLISa, PingAddresses is not used by resLISa,
neither is BroadcastNetwork.
PingNames = bb_mail;some_host;some_other_host
AllowedAddresses = 192.168.0.0/255.255.0.0
SearchUsingNmblookup = 1 # use nmblookup
FirstWait = 30 #30 hundredth seconds
SecondWait = -1 #only one try
#SecondWait = 60 #try twice, and the second time wait 0.6 seconds
UpdatePeriod = 300 #update after 300 secs
DeliverUnnamedHosts = 1 #also publish hosts without name
MaxPingsAtOnce = 256 #send up to 256 ICMP echo requests at once
+----------------------+
| Installation |
+----------------------+
Both reslisa and lisa open a so called raw socket to send and receive
ICMP echo requests (pings). To do this, they need root privileges.
lisa offers a service on TCP port 7741, it should be installed by root
and started when the system comes up, it depends on your distribution
how to do this.
reslisa is intended to be started per user, it doesn't offer anything to
the network. It needs to be installed setuid root.
If you use the rlan-ioslave from KDE2, reslisa can be started automatically
by reslisa.
lisa reads the file lisarc, reslisa reads the file reslisarc.
If you want to be able to configure both from the KDE Control Center,
you have to start them using the command line switch -K.
For more information where they look for configuration files read
the next chapter.
+--------------------------------------------+
| Command Line Options and other usage |
+--------------------------------------------+
The following command line options are supported:
-v, --version prints a short version info
-h, --help gives an overview over teh command line options
Some options regarding search order for the configuration files.
For reslisa the file is named reslisarc instead lisarc.
-u, --unix search at first for $HOME/.lisarc, then
for /etc/lisarc, this is the default behaviour
-k, --kde1 search at first for $HOME/.kde/share/config/lisarc,
then for $TDEDIR/share/config/lisarc
-K, --kde2 looks for the file lisarc in every directory
returned by running "tde-config --path config"
-c, --config=FILE read this and no other configuration file
This one is only available for LISa, not for resLISa.
-p, --port PORTNR start the server om this portnumber
if you use this LISa won't be able to
cooperate with other LISa's in the network
If you send the Hangup-Signal to lisa or reslisa, it will reread its
configuration file (killall -HUP lisa).
If you send the User1-Signal to lisa or reslisa, it will print some status
information to the standard output (killall -USR1 lisa). You won't see
anything if the console from which lisa/reslisa was started has terminated.
LISa and resLISa need a libstdc++ (it uses only the string-class from it),
it *doesn't* need neither Qt nor KDE.
So, that's it for now.
If you have suggestions, problems or whatever, contact me.
Have fun
Alexander Neundorf
<neundorf@kde.org>
|