Olá a todos do forum,
Estou a algumas madrugadas estudando C, mas sabe quando trava a mente e vc acaba nao resolvendo oque deseja implementar? sei que muitos ja passaram por isso...
No meu caso acontece que digito o ip, a porta e o programa trava.
não sai mais do lugar.
quando adiciono manualmente em htons(22) e inet_addr("127.0.0.1"); funciona normalmente.
mas oque eu quero fazer?
quero ler oque foi digitado e não fazer manualmente.
axo que consegui me expressar de uma forma mais facil possivel. :D
Espero que alguem consiga me ajudar.
Mais detalhes:
- Uso para compilar o seguinte comando: cc programa.c -o programa;
- Trabalho com FreeBSD;
Meu codigo abaixo:
/*
* #########################
* Author: spl0w
* coisa port scanner
* #########################
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
#include <netinet/in.h>
int conexao;
int coisa_socket;
char ip;
int porta;
struct sockaddr_in destino;
int main()
{
char command[10];
printf ("* Coisa Port Scanner *\n\n");
printf("host:\n");
scanf("%c,%d",&ip);
printf("porta:\n");
scanf("%d",&porta);
coisa_socket = socket(AF_UNIX,SOCK_STREAM,0);
if(coisa_socket < 0)
{
perror("wtf error");
exit(1);
}
destino.sin_family = AF_UNIX;
destino.sin_port = htons(porta);
destino.sin_addr.s_addr = inet_addr("ip");
bzero(&(destino.sin_zero),8);
conexao = connect(coisa_socket,(struct sockaddr * )&destino,
sizeof(destino));
if(conexao < 0) {
perror("A porta esta filtrada ou fechada.\n");
close(coisa_socket);
exit(1);
}
printf("A Porta esta aberta!\n\n");
close(coisa_socket); // fexa o socket;
return 0;
}
Opa, então, eu modifiquei seu código para corri-lo
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
int conexao;
int coisa_socket;
char ip[256];
int porta;
struct sockaddr_in destino;
printf ("* Coisa Port Scanner *\n\n");
printf("host:\n");
scanf("%s%*c",ip);
printf("porta:\n");
scanf("%d",&porta);
coisa_socket = socket(AF_INET,SOCK_STREAM,6);
if(coisa_socket < 0)
{
perror("wtf error");
return 1;
}
destino.sin_family = AF_INET;
destino.sin_port = htons(porta);
destino.sin_addr.s_addr = inet_addr(ip);
bzero(&(destino.sin_zero),8);
conexao = connect(coisa_socket,(struct sockaddr *)&destino, sizeof(destino));
close (coisa_socket);
if(conexao < 0) {
printf("A porta esta filtrada ou fechada.\n");
return 1;
}
printf("A Porta esta aberta!\n");
return 0;
}
Se quiser um exemplo de portscanner em C, pode ver o meu em
http://bugsec.googlecode.com/files/m0nad_portscan.c
Abraços,
m0nad
opa irmão, fmz a correção, muito obrigado.
vc é o cara.
m0nad camarada de mais, valeu pela contribuição aqui no fórum!
valeu pela ótima pergunta spl0w, sempre aprendemos juntos!
RESOLVIDO!
pdcrê, fmz o truta mesmo.
alguem mais aqui do forum programa em C ANSI?
o forum tem canal no irc?
abrass