0

Androidポートスキャナーを開発していますが、機能していないようです。PortScanクラスのコードは次のとおりです。

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class PortScan extends Activity
{

    String targetHost;

    /* Starting port for scan */
    public int startPort = 1;

    /* Ending port for scan */
    public int endPort = 100;

    /* Adapter for ListView */
    //private PortScanAdapter scanAdapter;

    /* Intent which invoked this class */
    private Intent scanIntent;

    /* Address of the host to scan */
    InetAddress targetAddress;

    /* Hostname of the target */
    String targetHostName;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        scanIntent = getIntent();
        prepareScan();
        setContentView(R.layout.port_scan_result);
        startScan();
    }

    private void prepareScan()
    {
        targetHost = scanIntent.getStringExtra("targetAddress");

        /* Get the IP Address of the target */
        try
        {
            targetAddress = InetAddress.getByName(targetHost);
        }
        catch(UnknownHostException e)
        {
            e.printStackTrace();
        }

        /* Get the hostname of the target */
        try
        {
            targetHostName = targetAddress.getHostName();
        }
        catch(Exception e)
        {
            targetHostName = targetHost;    
        }

       /*TextView hostName = (TextView)findViewById(R.id.host);
        hostName.setText(targetHostName); */
    }


    private void startScan()
    {
        /* Socket to connect to the remote machine */
        Socket portSocket;

        /* Textview which displays the scanresult */
        TextView scanText = (TextView)findViewById(R.id.portscanresult);

        scanText.setText("Scanning host "+ targetHost + "\n");

        for (int i = startPort; i == endPort; i++)
        {
            try
            {
                portSocket = new Socket();
                portSocket.connect(new InetSocketAddress(targetAddress, i), 1000);
                scanText.append("Target is listening on port "+ i + ": Port Open\n");
                portSocket.close();

            }   
            catch(Exception exception)
            {
                scanText.append("Target is not listening on port "+ i + ": Port Closed\n");
            }
        }
    }


}

このコードをエミュレーター(Android 2.3.3)でテストしています。問題がソケット接続にあるのかTextViewにあるのかわかりません。プログラムを実行すると、forループが開始する前の文字列だけが出力されます。つまり"Scanning host "+ targetHost + "\n"、何も起こりません。

どんな助けでも大歓迎です。

よろしく

4

1 に答える 1

4

まあ...これは決してうまくいきません...

for (int i = startPort; i == endPort; i++)

2番目は条件であり、あなたが最初にそう言ったので if i==endport私は等しいです...startPortint i=startPort

次のようにする必要があります。

for (int i = startPort; i <= endPort; i++)
于 2012-04-20T09:05:41.140 に答える