Avatar billede sempai_peter Nybegynder
02. august 2004 - 22:50 Der er 7 kommentarer

Telnet via C Eller C++ Programmering

Hej.

Jeg vil gerne vide hvordan jeg kan logge ind på en ftp server via C/c++.

Har prøvet følgende:
void main()
{   

    system("telnet 192.168.30.2 259");

    Sleep(1500);

    system("user\n");

    Sleep(1500);

    system("pass\n");

    system("pause");


}

Det kan god kompileres men den vil ikke logge ind automatisk. Det skal jeg selv skrive.

\Peter
Avatar billede arne_v Ekspert
02. august 2004 - 22:59 #1
system starter en sub process for hver kald.

duer ikke til den slags her.

Du skal igang med noget socket programmering.

Og FTP protokollen er ikke den allernemmeste at danse med.
Avatar billede sempai_peter Nybegynder
02. august 2004 - 23:01 #2
Det er heller ikke ftp det er telnet.
Jeg skal kun bruge den til at logge på en telnet server så jeg kan få adgang til en maskine. lidt mærkelig måde, men det virker
Avatar billede arne_v Ekspert
02. august 2004 - 23:06 #3
Så er du heldig.

Det er ikke så svært.

Skal din kode compiles på Windows eller Linux ?
Avatar billede sempai_peter Nybegynder
02. august 2004 - 23:10 #4
Windows
Avatar billede arne_v Ekspert
02. august 2004 - 23:31 #5
Prøv med noget a la dette her:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <windows.h>
#include <errno.h>

#define HOSTNAME "localhost"
#define USERNAME "arne"
#define PASSWORD "xxxxxxxx"

int main(int argc,char *argv[])
{
  WSADATA WSAData;
  WSAStartup(0x0101,&WSAData);
  int sd,status,len,ix,tmp;
  char out[512],in[51200];
  struct sockaddr local,remote;
  struct hostent *hostinfo;
  /* create socket */
  sd=socket(AF_INET,SOCK_STREAM,0);
  if(sd<0) {
      printf("Error creating socket: %s\n",strerror(errno));
      goto fin;
  }
  /* bind socket */
  local.sa_family=AF_INET;
  memset(local.sa_data,0,sizeof(local.sa_data));
  status=bind(sd,&local,sizeof(local));
  if(status<0) {
      printf("Error binding socket: %s\n",strerror(errno));
      goto fin;
  }
  /* lookup host */
  hostinfo=gethostbyname(HOSTNAME);
  if(!hostinfo) {
      printf("Error looking up host: %s\n",HOSTNAME);
      goto fin;
  }
  /* connect to host */
  remote.sa_family=hostinfo->h_addrtype;
  memcpy(remote.sa_data+2,hostinfo->h_addr_list[0],hostinfo->h_length);
  *((short *)remote.sa_data)=23;
  tmp=remote.sa_data[0];
  remote.sa_data[0]=remote.sa_data[1];
  remote.sa_data[1]=tmp;
  status=connect(sd,&remote,sizeof(remote));
  if(status!=0) {
      printf("Error connecting to host: %s port: %d\n",HOSTNAME,23);
      goto fin;
  }
  /* login and do dir */
  sprintf(out,"%s\r\n%s\r\ndir\r\n\exit\r\n",USERNAME,PASSWORD);
  status=send(sd,out,strlen(out),0);
  if(status<0) {
      printf("Error sending output\n");
      goto fin;
  }
  /* read response */
  ix=0;
  while ((len=recv(sd,in+ix,sizeof(in)-ix-1,0))>0) {
      ix = ix + len;
  }
  in[ix]='\0';
  printf("%s",in);
fin:
  closesocket(sd);
  WSACleanup();
  return 0;
}
Avatar billede arne_v Ekspert
02. august 2004 - 23:31 #6
Hvis programmet skal være rigtigt godt skal du lave noget non-blocking
socket read.
Avatar billede sempai_peter Nybegynder
02. august 2004 - 23:47 #7
Kan desværre ikke få det til at virke :(
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