Nano Hash - криптовалюты, майнинг, программирование

в то время как цикл выравнивает столбцы

привет, я написал perl-скрипт, в котором я сохранил столбцы из текстового файла, заполненного ip и сканированием портов, в переменные. Переменные содержат много IP-адресов, портов, протоколов, состояний и служб, теперь мне нужен цикл while, который берет все IP-адреса, хранящиеся в переменной ip, и сопоставляет их с соответствующими протоколами портов и состоянием и т. д. рядом выглядит так: 192.168 .3 45 tcp открыть smtp

вот мой код

$ip_address = `cat /cygdrive/c/Windows/System32/test11.txt | 
    grep 'Nmap scan report for'`;

$state = `cat /cygdrive/c/Windows/System32/test11.txt | grep -v 'PORT'|
    grep -v 'filtered'| grep -v 'latency'| grep -v 'Nmap' | grep -v 'Discovered' |
    grep -v 'Raw' | grep -v 'SYN' | grep -v 'DNS'| grep -v 'Ping' | 
    grep -v 'Scanning' `;

$port = `cat /cygdrive/c/Windows/System32/test11.txt | grep -v  'Discovered'| 
    grep -v 'Nmap' | grep -v 'PORT' | grep -v 'ports'| grep -v 'Read' | 
    grep -v 'Raw'| grep -v 'Completed'| grep -v 'DNS' | grep -v 'hosts' | 
    grep -v 'Ping' | grep -v 'SYN' | grep -v 'latency' `;

$protocol = `cat /cygdrive/c/Windows/System32/test11.txt | grep -v  'Discovered'| 
    grep -v 'Nmap' | grep -v 'PORT' | grep -v 'ports'| grep -v 'Read' | 
    grep -v 'Raw' | grep -v 'Completed'| grep -v 'DNS' | grep -v 'hosts' | 
    grep -v 'Ping' | grep -v 'SYN' | grep -v 'latency' `;
{

$service = `cat /cygdrive/c/Windows/System32/test11.txt | grep -v 'Nmap' | 
    grep-v 'Host' | grep -v 'filtered' | grep -v 'PORT' | grep -v 'Raw'| 
    grep -v 'Scanning'| grep -v 'Completed'| grep -v 'Ping' |grep -v 'DNS' | 
    grep -v 'Discovered'| grep -v 'SYN'`;

while($ip_address, $port, $protocol, $state, #service)
{
    chomp ($ip_address, $port, $protocol, $state, #service);
    print "$ip_address, $port, $protocol, $state, #service";
    exit 0;
}
15.04.2011

  • Вы знаете о флаге -oG для nmap, верно? Это значительно упрощает синтаксический анализ вывода. Также есть -oX, который выводит XML, который еще проще анализировать. 15.04.2011

Ответы:


1

Обычно я советую использовать инструменты, которые вы понимаете, и что можно делать такие вещи, как вызов awk из Perl. Но для этого кода я сделаю исключение. Вы должны использовать встроенные команды Perl для этой задачи. А именно, массивы и оператор Perl grep. Вот как бы я начал переписывать это.

# do this once instead of `cat ...` several times.
open my $fh, '<', '/cygdrive/c/Windows/System32/test11.txt';
my @the_input = <$fh>;
close $fh;

# do this instead of `| grep -v ... | grep -v ...`
my @ip_addresses = grep { /Nmap scan report for/ } @the_input;
my @states = grep { 
    !/PORT|filtered|latency|Nmap|Discovered|Raw|SYN|DNS|Ping|Scanning/
} @the_input;
my @ports = grep {
    !/Discovered|Nmap|PORT|ports|Read|Raw|Completed|DNS|hosts|Ping|SYN|latency/
} @the_input;
my @protocols = grep {
    !/Discovered|Nmap|PORT|ports|Read|Raw|Completed|DNS|hosts|Ping|SYN|latency/
} @the_input;
my @services = grep {
    !/Nmap|Host|filtered|PORT|Raw|Scanning|Completed|Ping|DNS|Discovered|SYN/
} @the_input;
15.04.2011

2

Обычно я стараюсь делать подобные вещи за один проход, например...

#!/usr/bin/perl

open(F, "/cygdrive/c/Windows/System32/test11.txt");

while(<F>) {

  # If the current line has something that matches an IP
  # address, store the matched pattern in $ip. We'll
  # use this as we process the remaining lines.
  #
  $ip = $1 if ( /Nmap scan report for (\d+\.\d+\.\d+\.\d+)/ );

  # Try to match lines like "ddd/www www www wwww"
  #
  ( $port, $protocol, $state, $service) = ( m|(\d+)/(\w+)\s+(\w+)\s+(\w+)| );

  print "$ip, $port, $protocol, $state, $service\n" if $port;

}
16.04.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..