Verificare se una stringa contiene un indirizzo IP

di il
19 risposte

Verificare se una stringa contiene un indirizzo IP

Buongiorno,
eccomi nuovamente a voi.... questo primo programma mi sta facendo impazzire.
Per farvi capire è un programmino che invia un Ping ad un server e comunica se è raggiungibile oppure no.
Il fatto e che non mi accontento e voglio migliorarlo.
All'avvio si apre una confirmdialog che richiede l'inserimento del tempo di intervallo della richiesta ( ogni quando secondi rinviare il PING) e l'indirizzo IP. Cercando e copiando sono riuscito ad evitare che si inseriscano lettere o spazi vuoti nel campo intervallo.
Ora non contento vorrei evitare che si inserisca un indirizzo ip non valido.
come posso fare il check della stringa che contiene l'IP.
Sperando di essere stato chiaro ringrazio...

19 Risposte

  • Re: Verificare se una stringa contiene un indirizzo IP

    Suggerisco di utilizzare una regular expression; con google dovresti trovare numerosi esempi
  • Re: Verificare se una stringa contiene un indirizzo IP

    Macché, è da stamattina alle 6 che cerco... ho provato di tutto ma nulla che io comprenda e possa poi applicare!
  • Re: Verificare se una stringa contiene un indirizzo IP

    https://www.mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-expression/ qui uno dei tanti esempi
  • Re: Verificare se una stringa contiene un indirizzo IP

    Capisco che la pappa pronta....
    io arrivo a un certo punto che ho la stringa:
    ipAddres=ipA.getText();
    quindi ipAddress è una stringa contenente l'IP

    il primo passo qual è?
  • Re: Verificare se una stringa contiene un indirizzo IP

    marco26762 ha scritto:


    ho provato di tutto ma nulla che io comprenda e possa poi applicare!
    Validare un indirizzo IP con una regular expression è possibile ma il pattern viene abbastanza complesso. Il punto è che le regex non "sanno" nulla di numeri, operano solo su sequenze di caratteri e basta. Quindi si devono fare più espressioni in "OR" per validare che un numero va solo da 0 a 255.
  • Re: Verificare se una stringa contiene un indirizzo IP

    Ragazzi non mi arrendo! Prima o po ne esco!
    Ammettiamo che voglia solo sapere [a-z] ... da dove parto?
  • Re: Verificare se una stringa contiene un indirizzo IP

    marco26762 ha scritto:


    Ragazzi non mi arrendo! Prima o po ne esco!
    Ammettiamo che voglia solo sapere [a-z] ... da dove parto?
    Esempio banalissimo scritto al volo:
    public class Validazioni {
        private static final Pattern PATTERN_SOLO_NUMERI = Pattern.compile("[0-9]+");
    
        private Validazioni() {}   // Evita la istanziazione
    
        public static boolean contieneSoloNumeri(String str) {
            return PATTERN_SOLO_NUMERI.matcher(str).matches();
        }
    }
    Poi da usare es.
    System.out.println(Validazioni.contieneSoloNumeri("0123"));     // true
    System.out.println(Validazioni.contieneSoloNumeri("01a23"));    // false
  • Re: Verificare se una stringa contiene un indirizzo IP

    Ma non fai prima con una banale funzioncella ?
  • Re: Verificare se una stringa contiene un indirizzo IP

    Banale funzioncella???? tipo'
  • Re: Verificare se una stringa contiene un indirizzo IP

    Niente non riesco ad inserire il codice... ora reggetevi forte perché sto per allegare tutto il mio codice!
    Prego evitare insulti!!!:)
  • Re: Verificare se una stringa contiene un indirizzo IP

    Ecco qui... reggetevi forte in fondo sono solo 3 giorni che uso java!



    import javax.swing.*;
    import java.util.regex.Pattern;
    import java.util.regex.Matcher;
    import java.net.*;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.awt.*;
    import java.awt.Desktop.Action;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
    import java.applet.*;
    import java.util.*;
    
    public class prova {
    	
    public static void  main(String[] arg) {
    	
    	Integer xbr=1;
    	Integer ni=0;
    	String ipAddress="1";
    	
    	// Apro la GUI
    	 do { 
    xbr=1;
    	JTextField rd= new JTextField("10");
    	JTextField ipA= new JTextField("127.0.0.1");
    Object[] message = {
    		"Request delay in seconds",rd,
    		"Server IP",ipA		
    };
    int option = JOptionPane.showConfirmDialog (null, message,"DATA INPUT", JOptionPane.OK_CANCEL_OPTION);
    if (option==JOptionPane.CLOSED_OPTION) System.exit(0);
    if (option==JOptionPane.CANCEL_OPTION) System.exit(0);
    if (option == JOptionPane.OK_OPTION) {
    	
     ipAddress = ipA.getText();
    
    
    
    
    
     String ns = rd.getText();
     
    // Elimino gli spazi vuoti dalla stringa
    	ns=ns.replaceAll(" ","");
    	
    // Verifico non ci siano lettere nella stringa
    	try {
    		  ni = Integer.parseInt(ns);
    		  } catch(NumberFormatException e) {}	  	  
    		  if(ni==0) JOptionPane.showMessageDialog(null,"You can't insert letters!");
    		  if(ni==0) xbr=3;
    }
    		  }while(xbr>2);
    	 
    // moltiplico per mille  
    		  Integer nt;
    		  nt= ni*1000;
    	      Integer x=1;
    	  	  do{
    	  		  try {
    	  			  InetAddress inet = InetAddress.getByName(ipAddress);
    	  			  System.out.println("   Sending Ping Request to " + ipAddress);
    	  			  Frame frame1 = new Frame();
    	  			  frame1.setUndecorated(true);
    	  			  Label ll = new Label("   Sending PING request to SAP Server   ", Label.CENTER); frame1.add(ll);
    	  			  frame1.pack();
    	  			  frame1.setVisible(true);
    	  			  Thread.sleep(1000);
    	      if (inet.isReachable(5000)){
    	    	  		Date date = new Date();
    	    	  		SimpleDateFormat ora;
    	    	  		ora= new SimpleDateFormat ("hh:mm");
    	    	  		x=2;
    	    	  		frame1.setVisible(false);
    	    	  		System.out.println(ipAddress + " is reachable.");
    	    	  		JFrame frame = new JFrame("SAP Ping request");                        
    	                JPanel panel = new JPanel();       
    	                panel.setLayout(new FlowLayout());
    	                JLabel label = new JLabel("FINALLY!!!");
    	                JLabel label1 = new JLabel("SAP Server is ON at "+ ora.format(date));
    	                JButton button = new JButton("Open SAP Client");
    	                Runtime runtime=Runtime.getRuntime();	
    	    				runtime.exec("say -v Victoria Attention! sap server is now reachable");
    	                button.addActionListener (new ActionListener() {
    	        public void actionPerformed (ActionEvent e) {               	
    	                		try {
    	                			Runtime runtime=Runtime.getRuntime();
    	                			runtime.exec(new String[] {"open","-a","SAPGUI 7.20rev8.app"});
    	                			System.exit(0);
    	                		} catch (IOException f) {
    	                			f.printStackTrace();                			
    	                		}
    	                		}                
    	                });                
    	                panel.add(label);
    	                panel.add(label1);
    	                panel.add(button);
    	                panel.setBackground(Color.green);
    	                frame.add(panel);       
    	                frame.setSize(300,100);
    	                frame.setLocationRelativeTo(null);     
    	                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	                frame.setVisible(true);
    	      } else {
    	      	x=3;
    	      	frame1.setVisible(false);
    	        System.out.println(ipAddress + " NOT reachable.");
    	        Frame frame = new Frame();
    	        frame.setUndecorated(true);
    	        Label l = new Label("   SAP Server is NOT reachable    ", Label.CENTER);
    	        frame.add(l);
    	        frame.pack();
    	        frame.setBackground(Color.RED);
    	        frame.setVisible(true);
    	        Toolkit.getDefaultToolkit().beep();
    	        Thread.sleep(3000);
    	        frame.setVisible(false);
    	        Thread.sleep(nt);
    	      }
    	    } catch ( Exception e ) {
    	      System.out.println("Exception:" + e.getMessage());
    	    }    
    	    }while(x>2);    
    	 }
    }
  • Re: Verificare se una stringa contiene un indirizzo IP

    A sto su MAC... quegli exec... non so se vanno pure su Windows
  • Re: Verificare se una stringa contiene un indirizzo IP

    marco26762 ha scritto:


    Banale funzioncella???? tipo'
    Puoi fare il parecchi modi.
    Dal momento che l'efficienza, in questo caso, non è importante, puoi adottare anche una strategia "a mangiare", oppure no.
    l'ideale è vedere la stringa come vettore e poi...
    crea una serie di funzioni di appoggio (bottom-up) del tipo

    1) isdigit (passi una stringa, e ti dice se il primo carattere è un numero)
    2) isdot (passi una stringa, e ti ritorna TRUE se il primo carattere è un .)
    3) prendinumerointesta
    cicla dall'inizio alla fine della stringa, crea una stringa di appoggio se ogni carattere è isdigit, si ferma quando
    non lo è più (is digit).
    questo ti serve per gestire i casi con 1, 2 o 3 cifre

    a questo punto ti basta mettere insieme i pezzi del "puzzle", verificando che ogni "pezzo" sia <255
    Si capisce? Te lo lascio per esercizio (come odiavo quando me lo dicevano! )
  • Re: Verificare se una stringa contiene un indirizzo IP

    Assolutamente incomprensibile... ma grazie lo stesso
Devi accedere o registrarti per scrivere nel forum
19 risposte