user2194507
user2194507

Reputation: 49

Search only IP in log file and save in array

I use nmap to scan availabe IP in my network, I want to use PHP scan only IP Address and save only IP Address in array.

here is text file out put.

Starting Nmap 6.40 ( http://nmap.org ) at 2013-10-15 22:07 SE Asia Standard Time
Nmap scan report for 110.77.144.25
Host is up (0.042s latency).
Nmap scan report for 110.77.144.27
Host is up (0.051s latency).
Nmap scan report for 110.77.144.88
Host is up (0.033s latency).
Nmap scan report for 110.77.144.90
Host is up (0.037s latency).
Nmap scan report for 110.77.144.91
Host is up (0.038s latency).
Nmap scan report for 110.77.144.92
Host is up (0.034s latency).
Nmap scan report for 110.77.144.93
Host is up (0.035s latency).
Nmap scan report for 110.77.144.137
Host is up (0.063s latency).
Nmap scan report for 110.77.144.139
Host is up (0.037s latency).
Nmap scan report for 110.77.144.145
Host is up (0.064s latency).
Nmap scan report for 110.77.144.161
Host is up (0.074s latency).
Nmap done: 256 IP addresses (42 hosts up) scanned in 14.44 seconds

I want output save in array like this

$available = array("110.77.233.1", "110.77.233.2", 
                   "110.77.233.3", "110.77.233.4",
                   "110.77.254.16");

How can I do with PHP?

Upvotes: 0

Views: 334

Answers (3)

Vin.AI
Vin.AI

Reputation: 2437

Try this:

nmap -v -sn 110.77.144.25-255 | grep ^Nmap | awk '{print $5;}' | grep ^[0-9].*

Result will be:

110.77.144.25
110.77.144.26
...
110.77.144.254
110.77.144.255

SAVE OUTPUT TO FILE AND READ FROM PHP:

COMMAND:

nmap -v -sn 110.77.144.25-255 | grep ^Nmap | awk '{print $5;}' | grep ^[0-9].* > output.txt

PHP:

<?php
$fp = fopen('[path to file]/output.txt', 'r');
while(!feof($fp)) {
    $each_ip = fgets($fp, 4096);
    echo $each_ip;
}
fclose($fp);

Upvotes: 0

Wrikken
Wrikken

Reputation: 70540

Structured output of -oX makes life simple:

$ nmap -sP -oX output.xml  10.60.12.50-59

Starting Nmap 6.00 ( http://nmap.org ) at 2013-10-15 20:09 CEST
Nmap scan report for 10.60.12.50-59
Host is up (0.000080s latency).
Nmap done: 10 IP addresses (1 host up) scanned in 1.41 seconds

$ php -r'$d = simplexml_load_file("output.xml");
> var_dump(array_map("strval",$d->xpath("//host[status[@state=\"up\"]]/address/@addr")));'
array(1) {
  [0] =>
  string(11) "10.60.12.59"
}

Upvotes: 0

Amal
Amal

Reputation: 76676

You can do the following:

$lines = file('file.txt');    
for ($i=1; $i <= count($lines); $i+=2) { 
    list($IP) = array_reverse(explode(' ', $lines[$i]));
    $available[] = $IP;
}
array_pop($available);
print_r($available);

Demo!

Upvotes: 1

Related Questions