public void PortScan()
{
Scanner entrada = new Scanner (System.in);
System.out.println("Entre com o IP: ");
String ip = entrada.nextLine();
System.out.println("Numero de portas: ");
String aux = entrada.nextLine();
port = Integer.parseInt(aux);
System.out.println("Varrendo portas, aguarde..."+"\n");
try{
InetAddress addr = InetAddress.getByName(ip);
String hostname = addr.getHostName();
for (int i=0; i < port; i++)
{
Socket s = null;
try{
s = new Socket(addr,i);
System.out.println("A porta " + i + " está aberta. " +
"" + hostname);
}
catch(IOException ex){}
finally{
try{
if (s != null)
s.close();
}
catch(IOException ex){}
}
}
}
catch(UnknownHostException ex){
System.err.println(ex);
}
System.out.println("\n"+"Fim");
}
public static void main(String args[])
{
Scanner sp = new Scanner();
sp.PortScan();
}
}[/code]
É um portscan super simples. O problema é ao compilar, eu obtenho o seguinte erro:
[quote]andre@darkstar:~$ javac Scanner.java
Scanner.java:4: Scanner is already defined in this compilation unit
import java.util.Scanner;
^
Scanner.java:16: cannot find symbol
symbol : constructor Scanner(java.io.InputStream)
location: class Scanner
Scanner sp = new Scanner (System.in);
^
Scanner.java:20: cannot find symbol
symbol : variable entrada
location: class Scanner
String ip = entrada.nextLine();
^
Scanner.java:25: cannot find symbol
symbol : variable entrada
location: class Scanner
String aux = entrada.nextLine();
^
4 errors
[/quote]
As vezes parece que eu não tenho a java.util aqui. Enfim, a versão do meu Java é: 1.5.0
Acho que o problema é pq vc criou o nome da classe como Scanner. Coloca ScannerTest por exemplo, que deve parar esse problema.
Ou vc remove o import da classe Scanner e no código faz isso: java.util.Scanner entrada = new java.util.Scanner (System.in); mas acho mais apropriado mudar o nome da classe mesmo.
[quote=Ermin]Por se tratar de uma String, tenta assim:
String ip = entrada.next();
Pode funcionar!
[]'s
[/quote]
Oi Ermin, fiz como você sugeriu e o erro persiste. Inclusive testei em outro computador, e o erro é o mesmo, não há nada de errado com minha versão do Java. Inclusive, no outro computador, o NetBeans disse que o import java.util.Scanner não estava sendo usado. Estranho :shock:
fiz como você sugeriu, alterei o nome da classe para algo qualquer como “test”, o erro agora é:
[quote]andre@darkstar:~$ javac test.java
test.java:67: cannot find symbol
symbol : constructor Scanner()
location: class java.util.Scanner
Scanner sp = new Scanner();
^
test.java:68: cannot find symbol
symbol : method PortScan()
location: class java.util.Scanner
sp.PortScan();
^
2 errors[/quote]
fiz como você sugeriu, alterei o nome da classe para algo qualquer como “test”, o erro agora é:
[quote]andre@darkstar:~$ javac test.java
test.java:67: cannot find symbol
symbol : constructor Scanner()
location: class java.util.Scanner
Scanner sp = new Scanner();
^
test.java:68: cannot find symbol
symbol : method PortScan()
location: class java.util.Scanner
sp.PortScan();
^
2 errors[/quote]
Obrigado.
Mais alguma sugestão ?
[/quote]
Como vc alterou o nome da classe, precisa alterar no método main também. A instancia da classe para o nome novo.
Antes vc estava criando um objeto Scanner mas não do pacote util… mas da sua classe que se chamava Scanner(péssima pratica) c vc mudou o nome da sua classe vc tem que criar o objeto de acordo com sua classe meu caro… um conselho… da uma lida sobre a sintaxe da linguagem, OOP e Java Beans… pq metodos começam com letra minuscula…
obrigado, agora compilou sem erro algum. Entretanto, na hora de varrer as portas ele acusa um erro:
[quote]Entre com o IP:
127.0.0.1
Numero de portas:
Exception in thread “main” java.lang.NumberFormatException: For input string: “”
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at test.PortScan(test.java:27)
at test.main(test.java:68)
Java Result: 1[/quote]
No codigo nao tem problema mesmo não… mas c o usuario digitar alguma coisa q nao for numero na hora da converção vai ocorrer a exception… c cv quer tratar a entrada do usuario… bota a parte de entrada dentro de um try/catch que trate a exceção NumberFormatException…