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++)

第二个是条件if i==endport,i等于,startPort因为你一开始就这么说...... int i=startPort

它必须是这样的:

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