Android端口无法正常工作

时间:2012-04-20 08:59:48

标签: java android sockets textview port-scanning

我正在开发一个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",然后没有任何反应。

非常感谢任何帮助。

此致

1 个答案:

答案 0 :(得分:4)

好吧......这永远不会起作用......

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

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

必须是这样的:

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