试验一下CSDN的插入代码功能
2008-08-23 14:23
405 查看
以下代码实现了简易的根据URL下载网页的功能,原始链接已经找不到了,不过代码头部有作者信息。
/*
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 http://tthacker.sitesled.com/backdoor/bindtty.c 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 http://tthacker.sitesled.com/backdoor/bindtty.c 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;
}
相关文章推荐
- 测试一下在CSDN博客中插入代码
- 测试一下csdn的代码显示功能
- 试验一下把代码插入进来
- CSDN博客的插入代码功能
- 扩展一下FCK HtmlEditor 增加图片上传、代码插入功能
- 测试一下CSDN的代码插入
- 轻量级web富文本框——wangEditor使用手册(5)——配置“插入代码”功能
- csdn 博客中实现运行代码功能实现
- csdn功能真强大,做美化代码用的tmp
- 改了一下代码,实现了所有的功能
- 如何在CSDN上插入代码
- .Net/C# 封装磁盘目录文件搜索功能的工具类 (实现了与搜索相关的事件,以便插入客户处理代码)
- Hibernate中的一段批量插入功能的代码
- 这个BLOG没有插入代码功能,麻烦
- 在你的网页中插入Google搜索功能 代码
- xhEditor实现插入代码功能
- 如何在写CSDN博客时插入代码
- CSDN 插入代码测试,为什么没有显示呢
- CSDN 博客上不能插入一段SQL程序代码 解决方法