Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск ПК в LAN. Тормоза при > 50. / 17 сообщений из 17, страница 1 из 1
14.09.2012, 12:08:34
    #37957446
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
Есть необходимость мониторить изменения в локальной сети (больше 10 подсетей типа 192.168.0.1).
Пока только сканирую пингами отвечающие ПК.

Дома 3-5 сканирует относительно быстро (с учетом таймаутов отсутствия ответов). Параллельные запросы пока специально не пробую. Или зря?

На работе условно если в ограничиваемый диапазон скана попадает больше 50 ПК, то потом в области:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
		while (iterator.hasNext()){
			str = String.valueOf(iterator.next()); 
			result = g1.checkCompIPUser(str);
			//System.out.print(iterator.next() + " "); 
			//ps("Hellow World");
			System.out.print(i2 + " ");
			i2++;
		}

сильно замыкается.
Последний реальный тест длился где-то ночь после окончания пингования ПК на стадии "Result counting ...":
D:\part1>java MS
Checking ...
2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 16, 17, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29
, 30, 31, 32, 33, 35, 36, 38, 39, 41, 43, 44, 45, 46, 50, 52, 53, 55, 59, 60, 62
, 66, 68, 69, 70, 72, 75, 76, 77, 79, 81, 82, 83, 86, 87, 88, 89, 90, 91, 94, 95
, 96, 97, 98, 99, 100, 104, 105, 106, 108, 110, 111, 112, 114, 117, 118, 125, 12
6, 127, 130, 131, 132, 133, 135, 136, 137, 139, 140, 142, 143, 148, 149, 150, 17
4, 193, 200, 201, 202, 204, 206, 209, 210, 220, 221, 222, 223, 224, 237, 242, 24
3, 244, 246, 248, 250, 254,
IP check completed


collection.size =116
Result counting ...
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 5
7 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
Collection size: 116


Пока только пингую. Потом на отвечающие хочу запускать доп. проверки (определить MAC, имя ...) и новые и/или изменившиеся добавлять в базу для последующего. Но при таких задержках ПК может в другой город уже уехать :)

Может неправильно, но пока проверяю, отвечает-ли ПК системным пингом, потому что ср-вами java (по памяти кажись пробовал java.net.ping) 8.8.8.8 получил в ответ что лежит, хотя системный говорил что отвечает ... :(

Полный код под спойлером.

MS.java
Код: java
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.
import java.util.*;
import java.io.FileNotFoundException;
import java.io.PrintStream;

public class MS {
	private String CompIP;
    public static void main(String[] args) {

		Comp g1 = new Comp();
		Comp g2 = new Comp();
		int size;
		boolean result = false;
		String str;
		
		/*try {
            System.setOut(new PrintStream("out.txt"));
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
            return;
        }*/
		
		HashSet collection = new HashSet ();
		Iterator iterator;
		System.out.println("Checking ... ");
		for (int i = 1; i <= 254 ; i++ /*, Thread.sleep(500)*/ )
        {			
			result = g1.checkCompIP(String.valueOf(i));
			//result = true;
			if (result)
			{
				collection.add(i);
				System.out.print(i + ", ");
			}
			else 
				{
					result = false;
				};
		}
		System.out.println();
		System.out.println("IP check completed ");
		System.out.println();
		iterator = collection.iterator();  
		int i2 = 1;
		System.out.println();
		System.out.println("collection.size =" + collection.size());
		System.out.println("Result counting ...");		
		while (iterator.hasNext()){
			// str = ;
			str = String.valueOf(iterator.next()); 
			result = g1.checkCompIPUser(str);
			//System.out.print(iterator.next() + " "); 
			//ps("Hellow World");
			System.out.print(i2 + " ");
			i2++;
		}
		System.out.println();
		size = collection.size();
		if (collection.isEmpty()){
			System.out.println("Collection is empty");
		}
		else{
			System.out.println( "Collection size: " + size);
		}
		System.out.println();
	  
		g1.setCompId(0);
		g2.setCompId(1);
		
		
		
		//System.out.println("g1 = " + g1.getCompId());
		//System.out.println("g2 = " + g2.getCompId());
				
		/*for (int i = 0; i <= 255 ; i++)
		{
			//System.out.print(" " + i);
			result = g1.checkCompIP(String.valueOf(i));
			System.out.println("IP = " + i + ". " + result);
			//System.out.println();
		}*/
		//System.out.println("g1 = " + result);
    }
}



Comp.java
Код: java
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.
import java.io.*;
import java.util.*;

public class Comp {

    private int compId;
    private String nameGroup;
    private String speciality;
	private String CompIP, CompIP2;
	private int IPAdress;
	boolean PCisActive;
	

    public int getCompId() {
        return compId;
    }

    public void setCompId(int compId) {
        this.compId = compId;
	}
	
	public int getIPAdress() {
		return IPAdress;
	}

    public void setIPAdress(int IPAdress) {
        this.IPAdress = IPAdress;
    }
	
	public boolean getPCisActive() {
		return PCisActive;
	}

    public void setPCisActive(boolean PCisActive) {
        this.PCisActive = PCisActive;
    }
	
	public boolean checkCompIP(String CompIP) {
		//String shell_command_start = "ping 192.168.88.";
		String shell_command_start = "checkip.bat 192.168.2.";
		//String shell_command_end = " -n 1"; // 4 FreeBSD
		String shell_command_end = "";
		String shell_command;
		Process proc = null;
		String s1 = null;
        this.CompIP = CompIP;
		// String str = CompIP;
		shell_command = (shell_command_start + CompIP + shell_command_end);
		//shell_command = ("checkip.bat");
		//System.out.println(shell_command);
		try {
			String s;
			proc = Runtime.getRuntime().exec(shell_command, null, null);
			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
			while((s = bufferedReader.readLine()) != null) {
				//System.out.println(s);	
				s1 = s;					
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		//System.out.println("s1 = " + s1);
		if (s1.equals("Host is UP!")) return true;
		else  return false; /*if ((s1) <> ("Host is UP!"))*/
		//return true;
    }
	
	public boolean checkCompIPUser(String CompIP2) {
		String shell_command_start = "4.bat  192.168.2.";
		String shell_command_end = "";
		String shell_command;
		Process proc = null;
		String s1 = null;
        this.CompIP2 = CompIP2;
		shell_command = (shell_command_start + CompIP2 + shell_command_end);
		try {
			String s;
			proc = Runtime.getRuntime().exec(shell_command, null, null);
			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
			while((s = bufferedReader.readLine()) != null) {
				s1 = s;					
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		/* if (s1.equals("Host is UP!")) return true;
		else  return false; /*if ((s1) <> ("Host is UP!"))*/
		//return true; */
		return true;
    }
}



checkip.bat
@echo off
ping -n 1 -l 1 %1 >> nul
if %errorlevel%==0 echo Host is UP!
if %errorlevel%==1 echo Host is DOWN!
rem pause


Подскажите пожалуйста, почему появляются эти задержки?
...
Рейтинг: 0 / 0
14.09.2012, 14:16:01
    #37957806
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
olexande,

используй, тотже ping, но без Runtime.getRuntime().exec и тд

InetAddress.isReachable(...)
...
Рейтинг: 0 / 0
14.09.2012, 14:30:57
    #37957844
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
И оно повлияет на "работу по перебору" collection?

тормоза как раз происходят при переборе коллекции ... Не при ее формировании .....
...
Рейтинг: 0 / 0
14.09.2012, 14:33:11
    #37957852
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
"Затык" по времени происходит между выводами "collection.size" и "Collection size".
...
Рейтинг: 0 / 0
14.09.2012, 14:37:17
    #37957862
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
А вас не смущает что во втором цикле перечислены вообще все адреса, независимо от того что найдено в первом?
...
Рейтинг: 0 / 0
14.09.2012, 15:06:58
    #37957946
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
Может я чего-то не правильно понял/сделал, но в первом цикле я добавляю в коллекцию список "отвечающих" компов ...

Код: java
1.
2.
3.
4.
5.
if (result)
			{
				collection.add(i);
				System.out.print(i + ", ");
			}


Если результат проверки будет негативным, то он (ПК) по идее в список (коллекцию) попасть не должен?
Или где-то между логикой и реализацией закралась ошибка?
...
Рейтинг: 0 / 0
14.09.2012, 15:09:12
    #37957954
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
olexandeМожет я чего-то не правильно понял/сделал, но в первом цикле я добавляю в коллекцию список "отвечающих" компов ...
Если результат проверки будет негативным, то он (ПК) по идее в список (коллекцию) попасть не должен?
Или где-то между логикой и реализацией закралась ошибка?
Скорее всего вы нас где-то обмынываете. Код у вас один. А результаты его работы из старой версии, которую вы закоментировали.
...
Рейтинг: 0 / 0
14.09.2012, 15:10:08
    #37957958
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
olexande оно повлияет на "работу по перебору" collection?

тормоза как раз происходят при переборе коллекции ... Не при ее формировании ..... .

"Затык" по времени происходит между выводами "collection.size" и "Collection size".

Т.е. Вы все валите на java, на итератор, 4.bat - вне подозрений. Ну сделай так, хоть убедитесь что итератор здесь ни причем:
//result = g1.checkCompIPUser(str);
...
Рейтинг: 0 / 0
14.09.2012, 15:11:26
    #37957964
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
Blazkowicz,

да не, он выводит i2, а не значение итератора
...
Рейтинг: 0 / 0
14.09.2012, 15:14:43
    #37957976
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
В первой итерации я проверяю все ПК с адресами от 1 до 254 (192.168.2.1 - 192.168.2.254 согласно коду в "checkCompIP" класса Comp)
Согласно вывода - в первом выводе указаны адреса "с пробелами" - пробелы, это не ответившие на момент проверки адреса.
То, что они в выводах совпадают, так это ИМХО логично ... Было-бы странно, если-бы они различались.

Планировал во второй итерации пробовать собирать MAC-адреса для добавления всего "щастя" в БД. Но нарвался на эту задержку.
...
Рейтинг: 0 / 0
14.09.2012, 15:20:05
    #37957993
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
0FDТ.е. Вы все валите на java, на итератор, 4.bat - вне подозрений. Ну сделай так, хоть убедитесь что итератор здесь ни причем:
//result = g1.checkCompIPUser(str);

я ни на что не валю, я прошу помощи при поиске затыка.

При отладке я делал заглушку - вместо проверки (системных пингов) ставил условие, сейчас закоментированое:
Код: java
1.
//result = true;


И получал правильный вывод от начала и до упора.

Дома (88-я сеть) скан проходит до конца. Дольше всего идет "пингование".

На работе пробовал ограничивать цикл 1-й итерации до 50 (потому в заголовке темы и такое число) - отрабоатывало быстро.
...
Рейтинг: 0 / 0
14.09.2012, 15:24:13
    #37958003
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
0FDда не, он выводит i2, а не значение итератора
Спасибо. Заставило задуматься ... По ходу что-то в этом есть ...
...
Рейтинг: 0 / 0
14.09.2012, 15:31:06
    #37958022
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
0FDда не, он выводит i2, а не значение итератора
Точно. Вот что значит код хрен разберешь. Ну, пусть нормальное логирование тогда прикручивает и в логе по таймштампам смотрит.
...
Рейтинг: 0 / 0
14.09.2012, 15:35:29
    #37958036
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
Извините, но с "нормальное логирование" пока не разобрался, а в кода пока казалось еще относительно не много наворотил.
...
Рейтинг: 0 / 0
14.09.2012, 16:18:48
    #37958117
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
А не пробовали для начала тупо вывести все "checkip.bat 192.168.2." в консоль, скопипастить, и запустить руками?
...
Рейтинг: 0 / 0
14.09.2012, 16:24:14
    #37958126
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
olexandeПодскажите пожалуйста, почему появляются эти задержки?Потому, что вы заворачиваете тривиальную задачу в избыточно сложную обёртку:
Код: sql
1.
(for /l %A in (1,1,254) do @ping -n 1 192.168.0.%A&arp -a|find " 192.168.0.%A ") > result.txt



P.S. Не забываем, что в cmd проценты удваиваются.
Маркировать по "не существует" и "существует, но не пингуется" - оставляется в качестве самостоятельного упражнения.
...
Рейтинг: 0 / 0
14.09.2012, 17:00:33
    #37958188
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск ПК в LAN. Тормоза при > 50.
Basil A. Sidorov
Огромное ВАМ СПАСИБО !!!

Благодаря Вам если добавить
set fname=result.txt
findstr /c:"динамический" %fname% >log.tmp
del %fname%
move log.tmp %fname%

И в итоге получится почти идеал:
192.168.2.2 *-*-*-*-8b-d6 динамический
192.168.2.3 *-*-*-*-8b-43 динамический
192.168.2.4 *-*-*-*-69-92 динамический
192.168.2.5 *-*-*-*-e8-9b динамический
...........................
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск ПК в LAN. Тормоза при > 50. / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]