/*
Wget V. 0.7 Download File Form Url
by wzt <[email]wzt@xsec.org[/email]>
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <netdb.h>
#include <time.h>
#define MAXLINE 65535
#define SENDDATA 1000
#define PORT 80
struct hostent *host;
char *data_m="Accept: */*\r\n"
"Accept-Language: zh-cn\r\n"
"UA-CPU: x86\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler ; .NET CLR 1.1.4322)\r\n";
char *data_e="Connection: Keep-Alive\r\n\r\n";
typedef struct DWONLOAD_FILE{
char hosts[100];
char ports[200];
char file[200];
int port;
}DOWN;
void usage(char *pro);
void ver();
DOWN abstract_host(char *src);
void download_file(char *url_t,char *local_file);
int connect_server(int port);
void usage(char *pro)
{
ver();
printf("usage : %s <remote file> <local file>\n",pro);
printf("exp: %s [url]http://tthacker.sitesled.com/backdoor/bindtty.c[/url] bindtty.c\n",pro);
exit(0);
}
void ver()
{
printf("\nWget Ver 0.6 by W.Z.T, [email]wzt@xsec.org[/email] 2006/10/27\n");
}
int connect_server(int port)
{
struct sockaddr_in remote;
int sock_id;
if((sock_id=socket(AF_INET,SOCK_STREAM,0))<0){
perror("sock_id");
exit(0);
}
remote.sin_family=AF_INET;
remote.sin_port=htons(port);
remote.sin_addr=*((struct in_addr *)host->h_addr);
if(connect(sock_id,(struct sockaddr *)&remote,sizeof(struct sockaddr))<0){
perror("connect");
return -1;
}
printf("\n[+] Connect :%s:%d OK!\r\n",inet_ntoa(remote.sin_addr),ntohs(remote.sin_port));
return sock_id;
}
void download_file(char *url_t,char *local_file)
{
DOWN file_get;
FILE *fp;
time_t t_s,t_e;
char download_url[SENDDATA];
char recv_data[MAXLINE];
int sock_fd;
long get_file_len=0;
int r_len;
int http_check;
char *real_data_pos;
ver();
file_get=abstract_host(url_t);
printf("\n[+] Host :%s\n",file_get.hosts);
printf("[+] Port :%d\n",file_get.port);
printf("[+] File :%s\n",file_get.file);
if((fp=fopen(local_file,"w+"))==NULL){
printf("\n[-] Create Local File %s Failed.\n",local_file);
exit(1);
}
if((host=gethostbyname(file_get.hosts))==NULL){
herror("gethostbyname");
exit(0);
}
// 提交url
sprintf(download_url,"GET %s HTTP/1.1\r\n%sHost: %s\r\n%s",file_get.file,data_m,file_get.hosts,data_e);
// printf("%s",download_url);
sock_fd=connect_server(file_get.port);
if(sock_fd==-1){
printf("connect error.\n");
exit(1);
}
time(&t_s);
printf("\n[+] Starting Download at %s",ctime(&t_s)+4);
// 接受并处理第-批数据
write(sock_fd,download_url,strlen(download_url));
r_len=read(sock_fd,recv_data,MAXLINE);
// printf("%s",recv_data);
http_check=atoi(recv_data+9);
// printf("%d\n",http_check);
if(http_check == 200 || http_check == 206){
// printf("\n[+] Download Begin ...\n");
}
else{
printf("\n[-] Bad request.\n");
exit(1);
}
// 获得文件大小
get_file_len=atoi(strstr(recv_data,"Content-Length: ")+16);
printf("\n[+] File Size: %ld\n",get_file_len);
// 寻找真正的文件开始位置
real_data_pos=strstr(recv_data,"\r\n\r\n")+4;
fputs(real_data_pos,fp);
// 循环读取数据
memset(recv_data,0,MAXLINE);
while((r_len=read(sock_fd,recv_data,MAXLINE))>0){
fputs(recv_data,fp);
// printf("%d\n",r_len);
memset(recv_data,0,MAXLINE);
}
fclose(fp);
time(&t_e);
printf("\n[+] Download File OK at %s",ctime(&t_e)+4);
}
DOWN abstract_host(char src[])
{
DOWN file_download;
char *http="http://";
int port;
int port_flag=0;
int i,j=0,k,l=0,h;
i=strlen(http);
for(;i<strlen(src);i++){
if(src[i]==':'){
port_flag=1;
h=i-1;
i++;
for(;src[i]!='/';i++){ /* 提取ports */
file_download.ports[j++]=src[i];
}
file_download.ports[j]='\0';
}
if(src[i]=='/'){
k=i-1;
break;
}
}
/
for(;i<strlen(src);i++){ /* 提取file */
file_download.file[l++]=src[i];
}
file_download.file[l]='\0';
i=strlen(http); /* 提取主机名 */
j=0;
k=((port_flag==1)?h:k);
for(;i<=k;i++)
file_download.hosts[j++]=src[i];
file_download.hosts[j]='\0';
if(port_flag==0) /* 提取port */
file_download.port=PORT;
else
file_download.port=atoi(file_download.ports);
return file_download;
}
int main(int argc,char **argv)
{
if(argc<3){
usage(argv[0]);
}
download_file(argv[1],argv[2]);
return 0;
}
Wget V. 0.7 Download File Form Url
by wzt <[email]wzt@xsec.org[/email]>
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <netdb.h>
#include <time.h>
#define MAXLINE 65535
#define SENDDATA 1000
#define PORT 80
struct hostent *host;
char *data_m="Accept: */*\r\n"
"Accept-Language: zh-cn\r\n"
"UA-CPU: x86\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler ; .NET CLR 1.1.4322)\r\n";
char *data_e="Connection: Keep-Alive\r\n\r\n";
typedef struct DWONLOAD_FILE{
char hosts[100];
char ports[200];
char file[200];
int port;
}DOWN;
void usage(char *pro);
void ver();
DOWN abstract_host(char *src);
void download_file(char *url_t,char *local_file);
int connect_server(int port);
void usage(char *pro)
{
ver();
printf("usage : %s <remote file> <local file>\n",pro);
printf("exp: %s [url]http://tthacker.sitesled.com/backdoor/bindtty.c[/url] bindtty.c\n",pro);
exit(0);
}
void ver()
{
printf("\nWget Ver 0.6 by W.Z.T, [email]wzt@xsec.org[/email] 2006/10/27\n");
}
int connect_server(int port)
{
struct sockaddr_in remote;
int sock_id;
if((sock_id=socket(AF_INET,SOCK_STREAM,0))<0){
perror("sock_id");
exit(0);
}
remote.sin_family=AF_INET;
remote.sin_port=htons(port);
remote.sin_addr=*((struct in_addr *)host->h_addr);
if(connect(sock_id,(struct sockaddr *)&remote,sizeof(struct sockaddr))<0){
perror("connect");
return -1;
}
printf("\n[+] Connect :%s:%d OK!\r\n",inet_ntoa(remote.sin_addr),ntohs(remote.sin_port));
return sock_id;
}
void download_file(char *url_t,char *local_file)
{
DOWN file_get;
FILE *fp;
time_t t_s,t_e;
char download_url[SENDDATA];
char recv_data[MAXLINE];
int sock_fd;
long get_file_len=0;
int r_len;
int http_check;
char *real_data_pos;
ver();
file_get=abstract_host(url_t);
printf("\n[+] Host :%s\n",file_get.hosts);
printf("[+] Port :%d\n",file_get.port);
printf("[+] File :%s\n",file_get.file);
if((fp=fopen(local_file,"w+"))==NULL){
printf("\n[-] Create Local File %s Failed.\n",local_file);
exit(1);
}
if((host=gethostbyname(file_get.hosts))==NULL){
herror("gethostbyname");
exit(0);
}
// 提交url
sprintf(download_url,"GET %s HTTP/1.1\r\n%sHost: %s\r\n%s",file_get.file,data_m,file_get.hosts,data_e);
// printf("%s",download_url);
sock_fd=connect_server(file_get.port);
if(sock_fd==-1){
printf("connect error.\n");
exit(1);
}
time(&t_s);
printf("\n[+] Starting Download at %s",ctime(&t_s)+4);
// 接受并处理第-批数据
write(sock_fd,download_url,strlen(download_url));
r_len=read(sock_fd,recv_data,MAXLINE);
// printf("%s",recv_data);
http_check=atoi(recv_data+9);
// printf("%d\n",http_check);
if(http_check == 200 || http_check == 206){
// printf("\n[+] Download Begin ...\n");
}
else{
printf("\n[-] Bad request.\n");
exit(1);
}
// 获得文件大小
get_file_len=atoi(strstr(recv_data,"Content-Length: ")+16);
printf("\n[+] File Size: %ld\n",get_file_len);
// 寻找真正的文件开始位置
real_data_pos=strstr(recv_data,"\r\n\r\n")+4;
fputs(real_data_pos,fp);
// 循环读取数据
memset(recv_data,0,MAXLINE);
while((r_len=read(sock_fd,recv_data,MAXLINE))>0){
fputs(recv_data,fp);
// printf("%d\n",r_len);
memset(recv_data,0,MAXLINE);
}
fclose(fp);
time(&t_e);
printf("\n[+] Download File OK at %s",ctime(&t_e)+4);
}
DOWN abstract_host(char src[])
{
DOWN file_download;
char *http="http://";
int port;
int port_flag=0;
int i,j=0,k,l=0,h;
i=strlen(http);
for(;i<strlen(src);i++){
if(src[i]==':'){
port_flag=1;
h=i-1;
i++;
for(;src[i]!='/';i++){ /* 提取ports */
file_download.ports[j++]=src[i];
}
file_download.ports[j]='\0';
}
if(src[i]=='/'){
k=i-1;
break;
}
}
/
for(;i<strlen(src);i++){ /* 提取file */
file_download.file[l++]=src[i];
}
file_download.file[l]='\0';
i=strlen(http); /* 提取主机名 */
j=0;
k=((port_flag==1)?h:k);
for(;i<=k;i++)
file_download.hosts[j++]=src[i];
file_download.hosts[j]='\0';
if(port_flag==0) /* 提取port */
file_download.port=PORT;
else
file_download.port=atoi(file_download.ports);
return file_download;
}
int main(int argc,char **argv)
{
if(argc<3){
usage(argv[0]);
}
download_file(argv[1],argv[2]);
return 0;
}