Escanear uma porta!

1. Escanear uma porta!

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/03/2014 - 15:57h

Eu comecei a estudar sockets a pouco tempo,no caso hoje,e eu estou tentado escrever um código que verifica se uma determinada porta do meu modem está aberta.O código:


#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
using namespace std;

int main(int argc,char *argv[])
{
int sock;
sockaddr_in vitima;


sock=socket(AF_INET,SOCK_STREAM,0);

if(sock<0)
{
cerr<<"\nFalhou no socket"<<endl;
return -1;
}

vitima.sin_family=AF_INET;
vitima.sin_port=htons((long)"80");
vitima.sin_addr.s_addr=inet_addr("192.168.1.1");

if((bind(sock,(sockaddr *)&vitima,sizeof(vitima)))<0)
{
cerr<<"\nFechado"<<endl;
close(sock);
}

else
{
cout<<"\nAberto"<<endl;

}



return 0;

Só que sempre que eu rodo ele,o programa me retorna "Fechado".Alguem aí poderia me dizer o que está errado?A e é mesmo a função bind que tem que ser usada ou é a connect,eu tentei com a connect támbem mais não funfou.


  


2. Re: Escanear uma porta!

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/03/2014 - 01:20h

A bind é pra você colocar uma porta em escuta...
Use connect, se conectar na porta é porque está aberta.

if((connect(sockfd,(struct sockaddr*)&alvo, sizeof(alvo)) == -1)
printf("closed\n");
else
printf("open\n");

Mas isso não está bem implementado, funciona, mas em alguns casos não. A mensagem closed pode ser impressa se houver erro na sua conexão (firewall, sem internet...) ou se a porta estiver fechada no alvo.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts