Avatar billede fredand Forsker
09. december 2004 - 23:27 Der er 4 kommentarer og
1 løsning

Is if possible to find out what service that listen on a port?

Hello!
Below is a code that performs som port scanning. But I wonder if it is possible to find out what kind of service ther is if the port is open.
I know:
//    int p =  21;        // ftp
//    int p =  23;        // telnet
//    int p =  25;        // smtp
    int p =  80;        // http
//    int p = 110;        // pop3

...But can I find this out by code dynamically?

Best regards
Fredrik

package portscanner;

import java.net.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.net.ssl.*;
import java.io.*;
import java.security.*;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.security.cert.*;
import com.dstc.security.smime.*;
import com.dstc.security.provider.*;

public class PortScannerApplication extends JFrame implements ActionListener
{
    JLabel hostjLabel = new JLabel("Host");
    JLabel fromjLabel = new JLabel("From-port");
    JLabel tojLabel = new JLabel("To-port");

    JTextField hostjTextField = new JTextField("192.168.0.1");
    JTextField fromjTextField = new JTextField("0");
    JTextField tojTextField = new JTextField("8000");

    JTextArea resultjTextArea = new JTextArea();
    JScrollPane jScrollPane = new JScrollPane(resultjTextArea);

    JButton jButton = new JButton("Scan");

    public PortScannerApplication()
    {
        setSize(400, 400);

        getContentPane().setLayout(null);

        setBackground(new Color(200, 200, 200));

        hostjLabel.setBounds(5, 5, 100, 25);
        fromjLabel.setBounds(5, 35, 100, 25);
        tojLabel.setBounds(5, 65, 100, 25);
        jButton.setBounds(5, 155, 100, 25);

        hostjTextField.setBounds(110, 5, 280, 25);
        fromjTextField.setBounds(110, 35, 280, 25);
        tojTextField.setBounds(110, 65, 280, 25);
        jScrollPane.setBounds(110, 95, 280, 270);

        jButton.addActionListener(this);

        getContentPane().add(hostjLabel);
        getContentPane().add(fromjLabel);
        getContentPane().add(tojLabel);
        getContentPane().add(jButton);

        getContentPane().add(hostjTextField);
        getContentPane().add(fromjTextField);
        getContentPane().add(tojTextField);
        getContentPane().add(jScrollPane);
    }

    public void actionPerformed(ActionEvent e)
    {
        try
        {
            scan();
            //resultjTextArea.setText();
        }
        catch (Exception ex)
        {
            resultjTextArea.setText("No response from server");
        }
    }

    public void scan() throws Exception
    {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("Scanning at: " + hostjTextField.getText());
        stringBuffer.append("\nBetween ports: " + fromjTextField.getText() + "-" + tojTextField.getText());
        resultjTextArea.setText(stringBuffer.toString());

        int startPort = Integer.parseInt(fromjTextField.getText());
        int stopPort = Integer.parseInt(tojTextField.getText());

        InetAddress inetAddress = InetAddress.getByName(hostjTextField.getText());

        for(int i = startPort; i <= stopPort; i++)
        {
            stringBuffer = new StringBuffer( resultjTextArea.getText() );
            try
            {
                Socket socket = new Socket(inetAddress, i);
                stringBuffer.append("\nports nr: ");
                stringBuffer.append(i);
                stringBuffer.append(" host is listening");
                socket.close();
            }
            catch (IOException e)
            {
                stringBuffer.append("\nports nr: ");
                stringBuffer.append(i);
                stringBuffer.append(" host is not listening");
            }
            resultjTextArea.setText(stringBuffer.toString());
        }
    }



    public static void main(String[] args)
    {
        PortScannerApplication portScannerApplication = new PortScannerApplication();
        portScannerApplication.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        portScannerApplication.setVisible(true);
    }
}
Avatar billede arne_v Ekspert
09. december 2004 - 23:31 #1
No - I do not think so.

You can guess based on IANA official list of assigned port numbers.

But if I run an HTTP server on port 88, then you will need to try and send
an HTTP request and check for a valid HTTP response.

number of ports multiplied with number of protocols is too big for practical use.
Avatar billede arne_v Ekspert
09. december 2004 - 23:32 #2
Avatar billede baitianlong Nybegynder
09. december 2004 - 23:45 #3
Det kan gå frygtelig galt når en svensker og en dansker snakker sammen på engelsk. Har i ikke set "Gamle mænd i nye biler" ?

I would like a meat room with a towel :P

Sorry for SPAM
Avatar billede arne_v Ekspert
01. januar 2005 - 13:36 #4
OK ?
Avatar billede fredand Forsker
03. januar 2005 - 10:12 #5
Thanks mate!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester