Avatar billede tripwire Nybegynder
07. december 2004 - 16:42 Der er 10 kommentarer og
1 løsning

Program til at åbne porte på en maskine

Hej Eksperter

Jeg står i den situation at jeg har behov for et program man kan starte fra en prompt, med f.eks. "6473, 57697, 80" som argument og så begynder programmet at lytte på de porte.. og hvis jeg så forbinder til den port fra en anden maskine med telnet, så sender den en besked tilbage, for at vise at der er hul igennem.. Det er til rent test formål..

jeg har faktisk ikke behov for koden, men kun for exe filen..

Håber i kan hjælpe.
Avatar billede arne_v Ekspert
07. december 2004 - 18:06 #1
Skal den bare sende et "OK" tilbage - eller skal svaret pakkes som
en valid HTTP response ?

(du angav port 80 i eksemplet)
Avatar billede arne_v Ekspert
07. december 2004 - 18:07 #2
Og til Windows eller til Linux ?
Avatar billede tripwire Nybegynder
08. december 2004 - 18:00 #3
Den skal bare sende et OK tilbage og det er til windows..
Avatar billede arne_v Ekspert
08. december 2004 - 19:21 #4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

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

DWORD __stdcall portlisten(void *p)
{
  char *buf = "OK";
  int *arg;
  int sd,sd2,status;
  struct sockaddr_in local;
  arg = (int *)p;
  sd=socket(AF_INET,SOCK_STREAM,0);
  if(sd<0) {
      printf("Error creating socket: %s\n",strerror(errno));
      goto fin;
  }
  local.sin_family=AF_INET;
  local.sin_port = htons((short)*arg);
  local.sin_addr.s_addr = INADDR_ANY;
  status=bind(sd,(struct sockaddr *)&local,sizeof(local));
  if(status<0) {
      printf("Error binding socket: %s\n",strerror(errno));
      goto fin;
  }
  status=listen(sd,5);
  if(status<0) {
      printf("Error listening socket: %s\n",strerror(errno));
      goto fin;
  }
  while(1)
  {
      sd2=accept(sd,0,0);
      if(sd2<0) {
        printf("Error accepting socket: %s\n",strerror(errno));
        goto fin;
      }
      status=send(sd2,buf,strlen(buf),0);
      if(status<0) {
        printf("Error sending OK\n");
        goto fin;
      }
      closesocket(sd2);
  }
fin:
  closesocket(sd);
  return 0;
}

#define MAX_PORTS 100

int main(int argc, char *argv[])
{
  WSADATA WSAData;
  HANDLE h[MAX_PORTS];
  DWORD id[MAX_PORTS];
  int i,arg[MAX_PORTS];
  WSAStartup(0x0101,&WSAData);
  for(i=1;i<argc;i++)
  {
      arg[i] = atoi(argv[i]);
      h[i] = CreateThread(NULL,0,portlisten,&arg[i],0,&id[i]);
  }
  printf("Press return to exit");
  getchar();
  WSACleanup();
  return 0;
}
Avatar billede tripwire Nybegynder
08. december 2004 - 19:47 #5
Findes der er en gratis compiler jeg kan bruge til at kompilere det, eller kan du lave en .exe fil til mig?
Avatar billede arne_v Ekspert
08. december 2004 - 20:02 #6
Der findes gratis C/C++ compilere.

F.eks. http://prdownloads.sf.net/mingw/MinGW-3.1.0-1.exe?download

Jeg kan også compile den for dig.
Avatar billede tripwire Nybegynder
08. december 2004 - 20:19 #7
Syntes ikke at den vil kompilere den ordentligt:

D:\Programmer\MinGW\bin>g++ -c port.cpp

D:\Programmer\MinGW\bin>g++ -o port port.o
port.o(.text+0x9f):port.cpp: undefined reference to `socket@12'
port.o(.text+0xf3):port.cpp: undefined reference to `htons@4'
port.o(.text+0x112):port.cpp: undefined reference to `bind@12'
port.o(.text+0x159):port.cpp: undefined reference to `listen@8'
port.o(.text+0x1a3):port.cpp: undefined reference to `accept@12'
port.o(.text+0x1f6):port.cpp: undefined reference to `send@16'
port.o(.text+0x21c):port.cpp: undefined reference to `closesocket@4'
port.o(.text+0x22f):port.cpp: undefined reference to `closesocket@4'
port.o(.text+0x28c):port.cpp: undefined reference to `WSAStartup@8'
port.o(.text+0x344):port.cpp: undefined reference to `WSACleanup@0'

D:\Programmer\MinGW\bin>

Jeg så samme fejl hvis jeg prøver med gcc istedet
Avatar billede arne_v Ekspert
08. december 2004 - 20:26 #8
gcc port.c -o port.exe -lws2_32
Avatar billede arne_v Ekspert
08. december 2004 - 20:27 #9
eller

gcc -c port.c
gcc port.o -o port.exe -lws2_32

hvis du foretrækker
Avatar billede arne_v Ekspert
08. december 2004 - 20:30 #10
ws2_32.a er winsock2 biblioteket som skal bruges
Avatar billede tripwire Nybegynder
08. december 2004 - 20:30 #11
Tusind tak.. det virker helt fint..
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