Autore Topic: regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)  (Letto 513 volte)

Offline faustf

  • Gambero
  • **
  • Post: 81
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #30 il: 11 Gennaio 2018, 22:25:17 »
altra domanda  come  faccio a dirgli fino a fine riga nel pattern dello scan ?

esempio
volendo perndere l ip  di questa stringa
Nmap scan report for 192.168.1.101 metterò   (*for *)e poi cosa metto ?? per dirgli che basta catturare ?? 
se  volessi perndere scan   avrei fatto (Nmap * report)
grazie

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.887
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #31 il: 11 Gennaio 2018, 23:51:30 »
la domanda è ma  regexp non  se le cag.... ??
Io non ho mai usato il Componente gb.pcre per le espressioni regolari, quindi non so dirti.

Ad ogni modo, gestire stringhe regolari è la cosa più semplice che esista.



altra domanda  come  faccio a dirgli fino a fine riga nel pattern dello scan ?

esempio
volendo perndere l ip  di questa stringa
Nmap scan report for 192.168.1.101 metterò   (*for *)e poi cosa metto ?? per dirgli che basta catturare ?? 
Il secondo asterisco ti raccoglie tutti i caratteri che vengono dopo il carattere dello spazio, che segue la parola "for", fino alla fine della stringa passata nel primo parametro attuale.
Se tu vuoi fermare la raccolta al primo carattere escape di ritorno a capo (espresso nel C con il valore esadecimale "0x0A" e in Gambas con "&h0A"), devi esplicitarlo nel modello-stringa, posto nel secondo parametro attuale.
Ciò però, come sappiamo, non è sufficiente, poiché dobbiamo nel secondo parametro di Scan( ) in fine aver raccolto l'intera stringa. Pertanto, avremo cura di aggiungere un asterisco dopo il carattere escape di fine riga-a capo ("\n").

Esempio pratico:
Codice: [Seleziona]
Public Sub Main()

  Print Scan("Nmap scan report for 192.168.1.101\n", "*for *\n*")[1]

End
(Ciò che a noi interessa, è il numero IP, che viene salvato dalla funzione Scan( ) nel secondo asterisco, il quale corrisponde all'indice 1 del vettore ritornato dalla funzione.)

« Ultima modifica: 12 Gennaio 2018, 00:19:08 da vuott »
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline faustf

  • Gambero
  • **
  • Post: 81
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #32 il: 12 Gennaio 2018, 01:19:38 »
allora grazie per la spiegazione sei un mito , ma la storia dell' * a fine /n dove stava scritta ?? che io non  l ho propio vista  :'( :'(.
mettendo cosi
 rMatch = Scan(Result, "*for *\n") o cosi  rMatch = Scan(Result, "*for *\n*") o  rMatch = Scan(Result, "*for *")
il risultato è sempre cosi
Codice: [Seleziona]
Starting Nmap 7.01 ( https://nmap.org ) at 2018-01-12 01:14 CET
Nmap scan report
192.168.1.1
Host is up (0.0061s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-wbt-server
MAC Address: 00:A0:A2:A9:32:C8 (Digicom)

Nmap scan report for 192.168.1.25
Host is up (0.018s latency).
PORT     STATE SERVICE
3389/tcp open  ms-wbt-server
MAC Address: 80:1F:02:8E:4F:9B (Edimax Technology)

Nmap scan report for 192.168.1.102
Host is up (0.098s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-wbt-server
MAC Address: 88:30:8A:50:90:52 (Murata Manufacturing)

Nmap scan report for 192.168.1.103
Host is up (-0.060s latency).
PORT     STATE SERVICE
3389/tcp open  ms-wbt-server
MAC Address: 80:1F:02:8E:4F:9B (Edimax Technology)

Nmap scan report for 192.168.1.106
Host is up (0.11s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-wbt-server
MAC Address: 00:0A:F5:DE:F8:38 (Airgo Networks)

Nmap scan report for 192.168.1.111
Host is up (0.025s latency).
PORT     STATE SERVICE
3389/tcp open  ms-wbt-server
MAC Address: 80:1F:02:8E:4F:9B (Edimax Technology)

Nmap scan report for 192.168.1.101
Host is up (0.00016s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-wbt-server

Nmap done: 256 IP addresses (7 hosts up) scanned in 29.93 seconds
pesca il primo ip.... suppongo  e poi....

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.887
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #33 il: 12 Gennaio 2018, 01:36:48 »
ma la storia dell' * a fine /n dove stava scritta ?? che io non  l ho propio vista
Ho interpretato male la riga "Nmap scan report for 192.168.1.101" da te scritta prima.

Comunque, hai visto questo mio esempio al riguardo ?
http://www.gambas-it.org/smf/index.php?topic=6061.msg42966#msg42966


Ad ogni modo, volendo tu gestire stringhe di caratteri, devi studiare le funzioni di Gambas sulla gestione delle Stringhe, ...altrimenti gironzoli vanamente.
Ricordati sempre di lasciar perdere ogni riferimento al VB, giacché Gambas NON è un adattamento di VB per Linux: Gambas è un linguaggio "orientato agli oggetti" con autonomia e dignità propria.
Ogni paragone con VB è semplicemente fuorviante.
« Ultima modifica: 12 Gennaio 2018, 15:18:49 da vuott »
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline faustf

  • Gambero
  • **
  • Post: 81
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #34 il: 12 Gennaio 2018, 09:53:58 »
Buon dì e grazie  ancora per le infinite dritte che tu mi dai , qualcosa da leggere riguardo le stringhe ingambas , hai percaso qualche link ?
approposito dell esempio , che ho fatto girare  propio ora , ho come outof bound  ss    Write Scan(ss, "*for *")[1], e  non capisco il pattern  che usi piu sopra
    num = Scan(Result, "*IP addresses (* *")   ma la parola  IP addresses non c'è  nel listato che  sputa  nmap , ma non si era detto che  scan usa le parole del testo per non prendere  e gli asterischi per prendere ??
 :rolleyes: :rolleyes: :rolleyes: :rolleyes: ???

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.887
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #35 il: 12 Gennaio 2018, 17:03:31 »
qualcosa da leggere riguardo le stringhe ingambas , hai percaso qualche link ?
Attualmente manca un manuale aggiornato di Gambas in Italiano.
In lingua inglese è facilmente reperibile quello di Rittinghouse, anche se ormai molto, troppo vecchio:
http://www.emcu.it/GAMBAS/gambas.pdf
dal quale potrai comunque ancora apprendere alcuni elementi basilari, in particolare sulle funzioni per la gestione dei file e delle stringhe.

In caso di dubbi nella programmazione, noi del forum siamo sempre soliti incoraggiare il principiante a effettuare la ricerca sul forum, a porre domande nel forum, e a servirsi della guida on-line che appare durante la scrittura delle risorse di Gambas nei codici.

Riporto di seguito altri collegamenti utili all'apprendimento del linguaggio Gambas:

Sito ufficiale di Gambas:
 - http://gambas.sourceforge.net/en/main.html

Wiki ufficiale di Gambas:
 - http://gambaswiki.org/wiki

Forum, Wiki ed altri siti esistenti su Gambas:
 - https://www.gambas-es.org/forum.php
 - http://www.gambasforge.org/
 - http://www.gambas-club.de/index.php
 - https://forum.gambas.one/
 - https://gambas.guru/tw/Welcome
 - http://www.gambaslinux.fr/
 - http://www.gambas-it.org/wiki/index.php?title=Pagina_principale .......
 - http://wiki.gambas-es.org/doku.php
 - https://gambas-buch.de/dw/doku.php
 - http://www.gambasforge.org/wiki
 - http://sologambas.blogspot.it/p/indice.html

Testi e manuali esistenti:
 - http://gambaswiki.org/wiki/doc/book?nh&l=en



approposito dell esempio , che ho fatto girare  propio ora , ho come outof bound  ss    Write Scan(ss, "*for *")[1]
Usando all'interno di quel mio codice le righe, da te sempre riportate, io ottengo questi risultati:
192.168.1.1 - 3389/tcp closed ms-wbt-server
192.168.1.25 - 3389/tcp open  ms-wbt-server
192.168.1.103 - 3389/tcp open  ms-wbt-server
192.168.1.105 - 3389/tcp open  ms-wbt-server
192.168.1.114 - 3389/tcp closed ms-wbt-server
192.168.1.120 - 3389/tcp closed ms-wbt-server
192.168.1.101 - 3389/tcp closed ms-wbt-server

Non so perché a te non funziona.
Le tue righe doi esempio vanno copiate e incollate così come sono in un file di testo da salvare nella cartella /tmp.


non capisco il pattern  che usi piu sopra
num = Scan(Result, "*IP addresses (* *")   ma la parola  IP addresses non c'è  nel listato che  sputa  nmap
Se vedi bene, le parole "IP addresses" sono presenti nell'ultima riga.
In vero questa mia linea di comando è rimasta nel codice erroneamente, poiché avevo inizialmente pensato ad un'altra soluzione e mi serviva sapere quanti risultati erano stati trovati: l'ultima riga dice sette
 IP addresses (7 hosts up) scanned
Però con questo codice che ho postato quella linea non è più utile, e provvedo ora a correggere il codice togliendola.
« Ultima modifica: 12 Gennaio 2018, 17:12:35 da vuott »
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline faustf

  • Gambero
  • **
  • Post: 81
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #36 il: 13 Gennaio 2018, 00:12:50 »
grazie per le dritte  :) , se un giorno ne scriverai uno di libri , ricorda che voglio la prima stampa con  dedica .
ho provato facendo il file nella tmp ed effettivamente funziona , ora il dubbio è ...forse lo stdout  di nmap è diverso dal txt salvato ??

Offline faustf

  • Gambero
  • **
  • Post: 81
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #37 il: 13 Gennaio 2018, 00:41:05 »
allora  ho fatto questa prova easy
prima copiando e incollano il listato che avevo messo nel fogli a in tmp e funziona  tutto ok ,  poi gli ho detto alla scansione di di buttare il risultato in tmp in b con questo comando
Codice: [Seleziona]
Shell "echo " & TextBox1.Text & " | sudo -S nmap -T4 -p3389 " & Getway & "/24 > /tmp/b" To Result 
e dada non funziona mi da array outofbound 

che poi prima che inchiodi mi  scrive questo
Codice: [Seleziona]
 Starting Nmap 7.01 ( https://nmap.org ) at 2018-01-13 00:45 CET
 - PORT     STATE  SERVICE
 -
 - PORT     STATE    SERVICE
 -
 - PORT     STATE    SERVICE
 -
 - PORT     STATE  SERVICE
 -
 - PORT     STATE    SERVICE
 -
 - PORT     STATE  SERVICE
ma come è possibile se nel pattern ci sono 5 spazi ???
« Ultima modifica: 13 Gennaio 2018, 00:48:11 da faustf »

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.887
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #38 il: 13 Gennaio 2018, 01:04:28 »
se un giorno ne scriverai uno di libri
Ci hanno già provato Gianluigi e kicco a coinvolgermi nella scrittura di un manuale: ...ve ne potete scordare.



Codice: [Seleziona]
Shell "echo " & TextBox1.Text & " | sudo -S nmap -T4 -p3389 " & Getway & "/24 > /tmp/b" To Result 
e dada non funziona mi da array outofbound 

che poi prima che inchiodi mi  scrive questo

ma come è possibile se nel pattern ci sono 5 spazi ???
Noto che l'impostazione delle righe del risultato del file b.txt è diversa da quella delle righe da te riportate nel tuo primo post.
Devi trovare una soluzione "universale" a livello di codice; che vada cioè bene sempre.
« Ultima modifica: 13 Gennaio 2018, 01:29:15 da vuott »
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline faustf

  • Gambero
  • **
  • Post: 81
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #39 il: 13 Gennaio 2018, 01:48:32 »
ok mi basta le dritte allora :D

e infatti stavo propio guardando , ho notato se lancio l nmap a casa della mia donna , ho le parentesi nell ip mentre da me a casa mia ho solo sul primo ip le parentesi e poi senza  :rolleyes: ???

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.887
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #40 il: 13 Gennaio 2018, 01:49:58 »
Non si ottengono dunque risultati con impostazioni "costanti".   :-X
In tal caso il mio codice di esempio ovviamente non è utile.
« Ultima modifica: 13 Gennaio 2018, 14:57:58 da vuott »
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline faustf

  • Gambero
  • **
  • Post: 81
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #41 il: 13 Gennaio 2018, 12:00:57 »
non utile al caso ma  didatticamente utilissimo  ;D :)

Offline faustf

  • Gambero
  • **
  • Post: 81
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #42 il: 15 Gennaio 2018, 00:11:52 »
per i posteri: è stato un parto...... e  alla fine  ho usato il  buon vecchio grep , secondo la mia modesta opinione (e io di programmazione ci capisco poo) come ho gia detto le regexp il gambero le gestisce davvero ..... male tipo: analizziamo , cè  il comando scan che farebbe quasi un ottimo lavoro se non poi cascare su pattern, che non mi sembrano aderenti a gli standard perl o qualsiasi altro per le regexp , il comando ad una  riga di regexp  farebbe a livello di pattern un ottimo lavoro , ma mi casca sul fatto che non legge in maniera globalmatch ma solo una riga e non cè un metodo o una classe chepossa farlo  , l unico potrebbe essere scrivere il mega pappone che si trova nel help , una roba che per un beginner , che è leggermente  piu avanti di hello world  , diventa un po un suicidio non assistito , in pratica quello che la shell linux con  grep awk ,perl e autoit (in windows )(che sono i linguaggi che "conosco") fanno in una  riga massimo due e sopratutto con sintassi da  beginner  gambas la fa complicata un casino , senza apportare nessun vantaggio dalla complicanza
di seguito la mia soluzione  :)
Codice: [Seleziona]
  Dim GetwayIP As String
  Dim Getway As String
  Dim GetwayMeno As String
  Dim IP As String
  Dim Port3389 As String
  Dim num, ss As String[]
  Dim i As Byte
 
  If TextBox1.Text = "" Then
    Message.Error("Errore devi inserire la pass di root se vuoi che funzioni, Ciao!")
  Else
    Shell "(/sbin/ip route | awk '/default/ { print $3 }')" To GetwayIP
    Getway = Trim(GetwayIP)
    GetwayMeno = Left(Getway, -1)   
    Shell "echo " & TextBox1.Text & " | sudo -S nmap -T4 -p3389 " & Getway & "/24 -oN /tmp/h" Wait
    Shell "cat /tmp/h  | grep -oP '" & GetwayMeno & "*'" To IP
    Shell "cat /tmp/h | grep -P '3389/tcp '" To Port3389
   
    ss = Split(IP, "\n")
    ss.Remove(0)
    num = Split(Port3389, "\n")
   
    For i = 0 To num.Max
      Print ss[i]
      Print num[i]
    Next
  Endif

P.S.  due cose che  mancano secondo me nell ide di gambas  sono il duplica righe con ctrl+d  stile scite editor e quando seleziono una variabile vederla selezionata in tutto il foglio
saluti
« Ultima modifica: 15 Gennaio 2018, 00:13:41 da faustf »

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.887
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #43 il: 15 Gennaio 2018, 00:45:05 »
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline faustf

  • Gambero
  • **
  • Post: 81
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #44 il: 15 Gennaio 2018, 00:49:45 »
 ;D ;D ;D ;D