Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

gethostbyname() wie verwenden? oO

Diskussion: gethostbyname() wie verwenden? oO im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, ich habe es grade eilig. Kann mir jemand schnell sagen,w ie man gethostbyname() aus winsock2.h verwendet? Weil das ...

Antwort
Alt 03.01.07, 09:53   #1 (permalink)
 
Registriert seit: 08.12.06
jesus Leistung: Facit NTK
Likes: 0
Standard gethostbyname() wie verwenden? oO

Anzeige

Hallo, ich habe es grade eilig.
Kann mir jemand schnell sagen,w ie man gethostbyname()
aus winsock2.h verwendet?

Weil das hier geht wirklich nicht:

// --- Socket an einen Host verbinden.
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.s_addr = inet_addr(gethostbyname("www.google.de"));

danke..

/* edit *

sry versehentlich ip eingegeben als argument

jesus ist offline   Mit Zitat antworten
Alt 03.01.07, 09:58   #2 (permalink)
 
Benutzerbild von Avenger
 
Registriert seit: 27.12.03
Avenger Leistung: Facit NTK
Avenger eine Nachricht über ICQ schicken
Likes: 0
Standard

soweit ich mich erinnere, reicht

Code:
addr.sin_addr.s_addr = inet_addr("80.67.17.129");
mfg
Avenger ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 03.01.07, 10:19   #3 (permalink)
Themenstarter
 
Registriert seit: 08.12.06
jesus Leistung: Facit NTK
Likes: 0
Standard

Ich wil eigentlich das man sowohl Hostip als auch Hostnamen eingeben kann
zum verbinden...
Ich bekomme es nicht hin, das hier umzusetzen:

Code:
#include <windows.h>
#include <fstream>
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;

string cc_escape (string in) {
  struct map_t {
    char cOld;
    char* sNew;
  };

  const map_t MAP[8] = {
    {'"', "%22" },
    {'%', "%25" },
    {'&', "%26" },
    {'?', "%3F" },
    {'=', "%3D" },
    {' ', "%20" },
    {'<', "%3C" },
    {'>', "%3E" }
  };

  string ret;
  size_t nLen = in.length ();
  for (size_t i = 0; i < nLen; ++i) {
    char c = in[i];
    bool bFound = false;
    for (int j = 0; j < 8; ++j)
      if (c == MAP[j].cOld) {
        ret += MAP[j].sNew;
        bFound = true;
        break;
      }
    if (!bFound)
      ret += c;
  }
  return ret;
}

char* get_host_ip (char* host) {
  // Soll die IP des Hosts zurückgeben, ob das Argument der
  // Name des Hosts ist oder sdie IP selber...
  // Existiert kein Host mit dem eingegebenen Namen/eingegebener IP, 0 zurückgeben...
}

int startWinsock (void);

int main (unsigned short argc, char* argv[]) {
  long rc = startWinsock();
  if (rc != 0) {
    printf ("Winsock konnte nicht gestartet werden -> %d\n", rc);
  } else {
    printf ("Winsock gestartet!\n");
    
    // ---  Socket erstellen.
    int s = socket(AF_INET, SOCK_STREAM, 0);
    if (s == INVALID_SOCKET) {
      printf ("Fehler: Socket konnte nicht erstellt werden -> %d\n", WSAGetLastError());
    } else {
      printf ("Socket erstellt!\n");
      
      // --- Abfragen, zu welchem host verbinden.
      char host[30];
      printf ("Host> ");
      scanf ("%s", host);
      
      // ---  Socket an einen Host verbinden.
      sockaddr_in addr;
      addr.sin_family = AF_INET;
      addr.sin_port = htons(80);
      addr.sin_addr.s_addr = inet_addr(host);

      // --- Prüfen, ob Host existiert.
      if (addr.sin_addr.s_addr == 0) {
        printf ("Konnte Host nicht finden!");
      } else {
        rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
        if (rc == -1) {
          printf ("Konnte nicht zum Server verbinden!\n");
        } else {
          printf ("Verbunden!\n");

          // ---  Request an Host.
          string pst = "test=hallo";
          string req = "";
          req += "POST /tell.php HTTP/1.0\r\n";
          req += "Host: "+host+"\r\n";
          req += "Content-Type: application/x-www-form-urlencoded\r\n";
          req += "Content-Length: ";
          req += pst.length();
          req += "\r\n\r\n";
          req += pst;

          if (!send(s, req.c_str(), req.length(), 0)) {
            printf ("Request konnte nicht gesendet werden!\n");
          } else {
            cout << endl << "--- --- REQ --- ---" << endl << req << endl << "--- --- --- --- ---" << endl << endl;
          }
        }
      }
    }
  }
  
  system ("PAUSE");
  return 0;
}

int startWinsock (void) {
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&wsa);
}
solln request sender an webserver werden.
jesus ist offline   Mit Zitat antworten
Alt 03.01.07, 13:48   #4 (permalink)
Gulliver
Guest
 
Likes:
Standard

Guck mal das an...da haste auch den Fall das da unterschieden wird ob hostname oder ip:

http://www.c-worker.ch/tuts/resolv.php#hostname
  Mit Zitat antworten
Alt 04.01.07, 04:21   #5 (permalink)
Themenstarter
 
Registriert seit: 08.12.06
jesus Leistung: Facit NTK
Likes: 0
Standard

ok, habs gelesen und folgendermaßen hinbekommen.

Code:
#include <windows.h>
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;

int startWinsock (void);
long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr);

int main (unsigned short argc, char* argv[]) {
  long rc = startWinsock();
  if (rc != 0) {
    printf ("Winsock konnte nicht gestartet werden -> %d\n", rc);
    return 1;
  }
  
  printf ("Winsock gestartet!\n");
    
  // ---  Socket erstellen.
  int s = socket(AF_INET, SOCK_STREAM, 0);
  if (s == INVALID_SOCKET) {
    printf ("Fehler: Socket konnte nicht erstellt werden -> %d\n", WSAGetLastError());
  } else {
    printf ("Socket erstellt!\n");
      
    // --- Abfragen, zu welchem host verbinden.
    char host[30];
    printf ("Host> ");
    scanf ("%s", host);
      
    // ---  Socket an einen Host verbinden.
    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);

    rc = getAddrFromString(host, &addr);
    if (rc == SOCKET_ERROR) {
      printf ("IP für %s konnte nicht aufgeloest werden\n", host);
      return 1;
    }
    
    printf ("IP aufgeloest!\n");

    // --- Prüfen, ob Host existiert.
    rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
    if (rc == -1) {
      printf ("Konnte nicht zum Server verbinden!\n");
      return 1;
    }
      
    printf ("Verbunden!\n");

    // ---  Request an Host.
    string pst = "test=hallo";
    string req = "";
    req += "POST /index.php HTTP/1.0\r\n";
    req += "Host: "; req += host; req += "\r\n";
    req += "Content-Type: application/x-www-form-urlencoded\r\n";
    req += "Content-Length: "; req += pst.length(); req += "\r\n\r\n";
    req += pst;

    if (!send(s, req.c_str(), req.length(), 0)) {
      printf ("Request konnte nicht gesendet werden!\n");
      return 1;
    }
        
    cout << endl << "--- --- REQ --- ---" << endl << req << endl << "--- --- --- --- ---" << endl << endl;

  }
  
  system ("PAUSE");
  return 0;
}

int startWinsock (void) {
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&wsa);
}

long getAddrFromString (char* hostnameOrIp, SOCKADDR_IN* addr) {
  long rc;
  unsigned long ip;
  HOSTENT* he;

  /* Parameter prüfen */
  if (hostnameOrIp==NULL || addr==NULL)
    return SOCKET_ERROR;

  /* eine IP in hostnameOrIp ? */
  ip = inet_addr(hostnameOrIp);

  /* bei einem fehler liefert inet_addr den Rückgabewert INADDR_NONE */
  if(ip != INADDR_NONE) {
    addr->sin_addr.s_addr=ip;
    return 0;
  } else {
    /* Hostname in hostnameOrIp auflösen */
    he = gethostbyname(hostnameOrIp);
    if (he == NULL) {
      return SOCKET_ERROR;
    } else {
      /*die 4 Bytes der IP von he nach addr kopieren */
      memcpy(&(addr->sin_addr),he->h_addr_list[0],4);
    }
    return 0;
  }
}
Ich habe da aber irgendwie ein merkwürdiges Problem,
das Ergebnis:

Zitat:
Winsock gestartet!
Socket erstellt!
Host> funpic.de
IP aufgelöst!
Verbunden!

--- --- REQ --- ---
POST /index.php HTTP/1.0
Host: funpic.de
Content-Type: application/x-www-form-urlencoded
Content-Length:

test=hallo
--- --- --- --- ---

Drücke sie eine beliebige Taste . . .
Hinter Content-Length: fehlt irgendwie die Zahl. ?( ?( ?(
jesus ist offline   Mit Zitat antworten
Alt 04.01.07, 13:36   #6 (permalink)
 
Registriert seit: 03.01.07
jeko Leistung: Facit NTK
Likes: 0
Standard

Vll. sendet der Server die Content-Length einfach nicht
jeko ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » gethostbyname() wie verwenden? oO
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[VB.NET] Winsocks verwenden Henni Code Kitchen 10 24.05.07 15:16
"Als Hintergrund verwenden" is weg iLLusion X Die Problemzone 4 28.11.06 18:42
gethostbyname ärgert. (c++) Morgenroete Code Kitchen 0 01.06.06 11:23
C++: unrar.dll verwenden mido Code Kitchen 3 26.11.05 21:58
Sonderzeichen in C++ verwenden... PeaceTreaty Code Kitchen 13 02.05.02 13:00


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61