Autore Topic: ping tutti gli indirizzi locali della rete  (Letto 283 volte)

Offline broke31

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy s6
  • Sistema operativo:
    windows
ping tutti gli indirizzi locali della rete
« il: 14 Dicembre 2016, 21:09:18 CET »
0
Salve ragazzi, stò cercando di risolvere questo problema senza però venirne a capo, stò cercando di pingare tutti gli ip presenti nella mia rete locale, per identificare quelli che attualmente sono connessi, ma non riesco a farlo funzionare correttamente, ho già impostato nel manifest il permesso di internet:
questo è il codice:
Codice (Java): [Seleziona]
String ip="192.168.1.";
        for(int i=0;i<256;i++){
            try {
                if (InetAddress.getByAddress((ip + i).getBytes()).isReachable(1000))
                    Toast.makeText(getApplicationContext(),"pingato!",Toast.LENGTH_LONG).show();
            else
                Toast.makeText(getApplicationContext(),"non trovato!",Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            e.printStackTrace();
        }
il problema che questo codice mi dà sempre false e non riesco a capire il perché.
« Ultima modifica: 14 Dicembre 2016, 21:13:47 CET da broke31 »

Offline NetGEL

  • Utente normale
  • ***
  • Post: 208
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:ping tutti gli indirizzi locali della rete
« Risposta #1 il: 14 Dicembre 2016, 22:30:12 CET »
0
Ciao,
anche io ho avuto problemi con il metodo isReachable in java. Perchè non provi a lanciare un comando ping su ogni indirizzo?

Una cosa del genere

Codice (Java): [Seleziona]
Process myProcess = Runtime.getRuntime().exec("ping " + ip);

Offline Nicolab1971

  • Utente junior
  • **
  • Post: 107
  • Respect: +2
    • Mostra profilo
Re:ping tutti gli indirizzi locali della rete
« Risposta #2 il: 29 Marzo 2017, 13:01:48 CEST »
0
Ciao, partendo dal presupposto che il codice giri in un thread separato dalla ui, il problema che vedo risiede qui (ip + i).getBytes(), il metodo getByAddress richiede un array di Byte.
Questo è una picco esempio scritto al volo stampa in una text quanti ping è riuscito a fare sui dispositivi della rete. Con piccole modifiche recuperi anche il nome e tutti i parametri che ti servono.

Codice (Java): [Seleziona]
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.IOException;
import java.net.InetAddress;

public class Activity1 extends AppCompatActivity
{

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    TextView testo;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        testo = (TextView) findViewById(R.id.testo);

        Button openActivityButton = (Button) findViewById(R.id.button);
        openActivityButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                new AsyncTask<Void, String, String >() {

                    @Override
                    protected void onPreExecute() {
                        super.onPreExecute();

                    }

                    @Override
                    protected String doInBackground(Void... params) {
                        int cntOk = 0;
                        int cntKO = 0;
                        String ip="192.168.0.";
                        String hostName;

                        for(int i=1;i<256;i++) {
                            try {
                                byte[] b = new byte[]{(byte) 192, (byte) 168, (byte) 0, (byte) i};
                                if (InetAddress.getByAddress(b).isReachable(1000)) {
                                    hostName = InetAddress.getByAddress(b).getHostName();

                                    cntOk++;

                                } else {

                                    cntKO++;
                                }

                                publishProgress("ping riusciti: " + String.valueOf(cntOk) + ", ping non risuciti: " + String.valueOf(cntKO));
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        return null;
                    }

                    @Override
                    protected void onProgressUpdate(String... progress) {
                      testo.setText(progress[0]);
                    }

                    @Override
                    protected void onPostExecute(String ipAddres) {
                        super.onPostExecute(ipAddres);

                    }
                }.execute();
                /*
                RandomActivity r = new RandomActivity(0);
                Intent i = new Intent(Activity1.this, (Class<?>) r.goActivity());
                startActivity(i);*/

            }
        });

    }



}