/*
Get HTML Code
Descrizione: Scarica il codice HTML di un link passato come argomento
Autore: __GiReX__
Linguaggio: C++
Site: http://girex.altervista.org
Compilare con Dev-C++ e linkare a mano la libreria libwsock32.a
*/
#include <iostream>
#include <fstream>
#include <cstring>
#include <winsock.h>
using namespace std;
int main(int argc, char *argv[])
{
int error;
WSADATA info;
SOCKET sock;
SOCKADDR_IN sock_addr;
LPHOSTENT host;
char crec, buff[1024];
ofstream file("log.html", ios::app);
if(argc != 3) {
cout << "\nUsage: <prog> <link> <path>\n";
cout << "Example: get-html.exe girex.altervista.org /index.php\n";
return 1;
}
WSAStartup(MAKEWORD(2,2), &info);
sock = socket(PF_INET, SOCK_STREAM, 0);
sock_addr.sin_family = PF_INET; // Protocollo in uso
sock_addr.sin_port = htons(80); // Porta
host = gethostbyname(argv[1]); // IP come argomento
if(!host) {
cout << "\nErrore, impossibile risolvere l'host, ricontrolla il formato d'immissione\n";
cout << "Example: get-html.exe girex.altervista.org /index.php\n";
return 1;
}
sock_addr.sin_addr = *((LPIN_ADDR)*host->h_addr_list); // Risolvo l'IP
error = connect(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr)); // Connessione con l'host
if(error == SOCKET_ERROR) {
cout << "\nErrore di connessione\n";
return 1;
}
strcpy(buff, "GET "); // Richiesta GET
strcat(buff, argv[2]);
strcat(buff, " HTTP/1.1\r\n");
strcat(buff, "Host: ");
strcat(buff, argv[1]);
strcat(buff, "\r\nUser-Agent: __GiReX__ Software\r\n");
strcat(buff, "Connection: Close\r\n\r\n");
send(sock, buff, strlen(buff), 0);
do {
error = recv(sock, &crec, sizeof(crec), 0);
file.put(crec);
} while(error);
cout << "\nOperazione completata!\n";
file.close();
closesocket(sock);
WSACleanup();
return 0;
}