Java, запись файла через Nmap зависает в большой сети - PullRequest
0 голосов
/ 20 декабря 2011

Я выполняю Nmap на Java, который сохраняет информацию о сети в файл.Код выглядит так:

Process p = Runtime.getRuntime().exec(new String[] {"nmap", "-O", "-oX", nmapFileLocation, ipStr+"/24"});

BufferedReader in = new BufferedReader(  new InputStreamReader(p.getInputStream()));  
String line = null;  while ((line = in.readLine()) != null) {}   
p.waitFor();

OutputStream  os = p.getOutputStream(); os.flush();  
os = p.getOutputStream(); os.flush();

Кажется, мне нужно прочитать все строки, чтобы заставить его работать (я имею в виду цикл while);это работало для небольших сетей.Я пробовал несколько вещей, чтобы заставить его работать в больших сетях, но он зависает.

Например, в настоящее время я запускаю приложение Java, которое выполняет nMap.Он работает в течение получаса и висит там, где находятся строки кода nmap.Я наблюдал (много раз), что если я открою созданный файл во время работы приложения Java, я вижу только первые ~ 12 строк во вновь созданном файле.Однако, как только я закрываю приложение Java, все ~ 1600 строк файла становятся видимыми.Я готов экспериментировать с разными подходами.

1 Ответ

0 голосов
/ 20 декабря 2011

Джон,

попробуй apache commons-exec .

Как только это мне помогло, может помочь тебе.

Вот почему (с их сайта):
Выполнение внешних процессов из Java является хорошо известной проблемной областью.Он изначально зависит от платформы и требует, чтобы разработчик знал и тестировал поведение платформы, например, используя cmd.exe в Windows или ограниченный размер буфера, вызывающий взаимные блокировки.

"Вы смотрите на CommonsИсполним и думаем: «Ух ты - вызов Runtime.exec () - это просто, а люди Apache тратят свое и мое время на тонны кода». Что ж, мы усвоили трудный путь (в моем случае более чем один раз), используя простой Runtime.exec () может быть болезненным опытом. Поэтому вам предлагается вникнуть в commons-exec и взглянуть на сложные уроки простым способом ... "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...