linux 论坛自动发帖器,BBS发帖机器人

/* ****** 用tcpdump分析协议后用C语言自己编写一个BBS发贴机器人 bbsrobot.c 开始 *********** */

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

/* some global variable */

#ifdefine OS_LINUX

#define USER_AGENT "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.8.0.4) Gecko/20060611 Ubuntu/unstable Firefox/1.5.0.4"

#else

#define USER_AGENT "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

#endif

#define SERVER_HOST ""

#define CLIENT_ACCEPT "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"

#define CLIENT_LANGUAGE "zh-cn,zh;q=0.5"

#define CLIENT_CHARSET "gb2312,utf-8;q=0.7,*;q=0.7"

#define BORDID 52

struct sockaddr_in server_addr;

int portnumber = 0, sockfd = 0, dsend = 0, totalsend = 0, nbytes = 0, reqn = 0, i = 0, j = 0, ret = 0;

struct hostent *host;

char request[1024] = "", buffer[1024] = "", httpheader[1024] = "";

/* some functions */

void ConnectWeb(void) { /* 连接网站 */

/* create a socket descriptor */

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

{

fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));

exit(1);

}

/* bind address */

bzero(&server_addr,sizeof(server_addr));

server_addr.sin_family=AF_INET;

server_addr.sin_port=htons(portnumber);

server_addr.sin_addr=*((struct in_addr *)host->h_addr);

/* connect to the server */

if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)

{

fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));

exit(1);

}

}

/************关于本文档********************************************

*filename:用tcpdump分析协议后用C语言自己编写一个BBS发贴机器人

*purpose:自己编写的一个http协议网络客户端程序,可以用来定时往网站发贴

*wrote by: zhoulifa(zhoulifa@163.com) 周立发()

Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言编程

*date time:2006-07-24 21:00:00

*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途

* 但请遵循GPL。

*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力

*********************************************************************/

void SendRequest(void) { /* send my http-request to web server */

dsend = 0;totalsend = 0;

nbytes=strlen(request);

while(totalsend < nbytes) {

dsend = write(sockfd, request + totalsend, nbytes - totalsend);

if(dsend==-1) {fprintf(stderr, "send error!%s\n", strerror(errno));exit(0);}

totalsend+=dsend;

printf("\nRequest.%d %d bytes send OK!\n", reqn - 1, totalsend);

}

}

void ReceiveResponse(void) { /* get response from web server */

fd_set writefds;

struct timeval tival;

int retry = 0;

i=0; j = 0;

__ReCeive:

FD_ZERO(&writefds);

tival.tv_sec = 10;

tival.tv_usec = 0;

if(sockfd > 0) FD_SET(sockfd, &writefds);

else {fprintf(stderr, "\nError, socket is negative!\n"); exit(0);}

ret = select(sockfd + 1, &writefds, NULL, NULL, &tival);

if(ret ==0 ) {

if(retry++ < 10) goto __ReCeive;

}

if(ret <= 0) {fprintf(stderr, "\nError while receiving!\n"); exit(0);}

if(FD_ISSET(sockfd, &writefds)) {

memset(buffer, 0, 1024);

memset(httpheader, 0, 1024);

/* receive data from web server */

while((nbytes=read(sockfd,buffer,1))==1)

{

if(i < 4) {

if(buffer[0] == '\r' || buffer[0] == '\n') i++;

else i = 0;

memcpy(httpheader + j, buffer, 1); j++;

}

else {

// fprintf(stdout, "%c", buffer[1]);/* print content on the screen */

i++;

}

}

}

}

void DoOnce() { /* send and receive */

ConnectWeb(); /* connect to the web server */

/* send a request */

SendRequest();

/* receive a response message from web server */

ReceiveResponse();

close(sockfd); /* because HTTP protocol do something one connection, so I can close it after receiving */

}

void DoneWithList() {

printf("Request.%d is:\n%s", ++reqn, request);

DoOnce();

printf("\nThe following is the response header:\n%s\n", httpheader);

}

int main(int argc, char ** argv)

{

char *tp1, *tp2, *tp3;

char ltime[16]="1152109555207", rtime[16]="0", cnzz_eid[16]="20369173-";

char bblastvisit[16] = "", bblastactivity[16] = "";

char loginpost[256] ="vb_login_username=myusername&vb_login_password=mypassword&s=&do=login&forceredirect=1&vb_login_md5password=99b291003954c7637a30bc6c799785f0&vb_login_md5password_utf=99b291003954c7637a30bc6c799785f0";

char PHPSESSID[1024] = "";

char bblasturl[1024] = "";

char bbsessionhash[1024] = "";

char bbforum_view[1024] = "";

char postmsg[1024] = "subject=贴子主题&WYSIWYG_HTML=贴子内容在这里&iconid=0&s=&do= postthread&posthash=b77747456dec01432fe5252c1ad9aa41&poststarttime=1153704013&parseurl=1&emailupdate=1&polloptions=4&sbutton=%CC%E1%BD%BB%D0%C2%D6%F7%CC%E2&f="; /* 在这里可以写发贴主题和发贴内容 */

portnumber=80;

// if((host=gethostbyname(host_addr))==NULL)/* get ip address by domain */

if((host=gethostbyname(SERVER_HOST))==NULL)/* get ip address by domain */

{

fprintf(stderr,"Gethostname error, %s\n", strerror(errno));

exit(1);

}

/* my first request */

sprintf(request, "GET /bbs/ HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nAccept: %s\r\nAccept-Language: %s\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: %s\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nCookie: rtime=%s; cnzz_eid=%s; ltime=%s\r\n\r\n", SERVER_HOST, USER_AGENT, CLIENT_ACCEPT, CLIENT_LANGUAGE, CLIENT_CHARSET, rtime, cnzz_eid, ltime);

DoneWithList();

/* get some cookie */

tp1 = strstr(httpheader, "bblastvisit=");

tp2 = strchr(tp1, ';');

memcpy(bblastvisit, tp1 + strlen("bblastvisit="), strlen(tp1) - strlen(tp2) - strlen("bblastvisit="));

tp1 = strstr(httpheader, "bblastactivity=");

tp2 = strchr(tp1, ';');

memcpy(bblastactivity, tp1 + strlen("bblastactivity="), strlen(tp1) - strlen(tp2) - strlen("bblastactivity="));

/* my second request */

memset(request, 0, 1024);

sprintf(request, "POST /bbs/login.php HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nAccept: %s\r\nAccept-Language: %s\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: %s\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nReferer: http://%s/bbs/\r\nCookie: ltime=%s; rtime=%s; cnzz_eid=%s; bblastvisit=%s; bblastactivity=%s\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\n\r\n%s", SERVER_HOST, USER_AGENT, CLIENT_ACCEPT, CLIENT_LANGUAGE, CLIENT_CHARSET, SERVER_HOST, ltime, rtime, cnzz_eid, bblastvisit, bblastactivity, strlen(loginpost), loginpost);

DoneWithList();

/* get some cookie */

tp1 = strstr(httpheader, "bblastactivity=");

tp2 = strchr(tp1, ';');

memcpy(bblastactivity, tp1 + strlen("bblastactivity="), strlen(tp1) - strlen(tp2) - strlen("bblastactivity="));

tp1 = strstr(httpheader, "PHPSESSID=");

tp2 = strchr(tp1, ';');

memcpy(PHPSESSID, tp1 + strlen("PHPSESSID="), strlen(tp1) - strlen(tp2) - strlen("PHPSESSID="));

tp1 = strstr(httpheader, "bblasturl=");

tp3 = strstr(tp1 + strlen("bblasturl="), "bblasturl=");

if(tp3) {

tp2 = strchr(tp3, ';');

memcpy(bblasturl, tp3 + strlen("bblasturl="), strlen(tp3) - strlen(tp2) - strlen("bblasturl="));

}

else {

tp2 = strchr(tp1, ';');

memcpy(bblasturl, tp1 + strlen("bblasturl="), strlen(tp1) - strlen(tp2) - strlen("bblasturl="));

}

tp1 = strstr(httpheader, "bbsessionhash=");

tp2 = strchr(tp1, ';');

memcpy(bbsessionhash, tp1 + strlen("bbsessionhash="), strlen(tp1) - strlen(tp2) - strlen("bbsessionhash="));

// printf("\n%s\t%s\t%\t%s\n", bblastactivity, PHPSESSID, bblasturl, bbsessionhash);

/* my third request */

memset(request, 0, 1024);

sprintf(request, "GET /bbs/f%d.html HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nAccept: %s\r\nAccept-Language: %s\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: %s\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nReferer: http://%s/bbs/\r\nCookie: bblasturl=%s; ltime=%s; rtime=%s; cnzz_eid=%s; bblastvisit=%s; bblastactivity=%s; PHPSESSID=%s; bbsessionhash=%s\r\n\r\n", BORDID, SERVER_HOST, USER_AGENT, CLIENT_ACCEPT, CLIENT_LANGUAGE, CLIENT_CHARSET, SERVER_HOST, bblasturl, ltime, rtime, cnzz_eid, bblastvisit, bblastactivity, PHPSESSID, bbsessionhash);

DoneWithList();

/* get some cookie */

tp1 = strstr(httpheader, "bbforum_view=");

if(tp1) {

tp2 = strchr(tp1, ';');

memcpy(bbforum_view, tp1 + strlen("bbforum_view="), strlen(tp1) - strlen(tp2) - strlen("bbforum_view="));

}

// printf("\n%s\n", bbforum_view);

/* my fourth request */

memset(request, 0, 1024);

if(strlen(bbforum_view) > 0)

sprintf(request, "GET /bbs/newthread.php?do=newthread&f=%d HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nAccept: %s\r\nAccept-Language: %s\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: %s\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nReferer: http://%s/bbs/f%d.html\r\nCookie: bblasturl=%s; ltime=%s; rtime=%s; cnzz_eid=%s; bblastvisit=%s; bblastactivity=%s; PHPSESSID=%s; bbsessionhash=%s; bbforum_view=%s\r\n\r\n", BORDID, SERVER_HOST, USER_AGENT, CLIENT_ACCEPT, CLIENT_LANGUAGE, CLIENT_CHARSET, SERVER_HOST, BORDID, bblasturl, ltime, rtime, cnzz_eid, bblastvisit, bblastactivity, PHPSESSID, bbsessionhash, bbforum_view);

else

sprintf(request, "GET /bbs/newthread.php?do=newthread&f=%d HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nAccept: %s\r\nAccept-Language: %s\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: %s\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nReferer: http://%s/bbs/f%d.html\r\nCookie: bblasturl=%s; ltime=%s; rtime=%s; cnzz_eid=%s; bblastvisit=%s; bblastactivity=%s; PHPSESSID=%s; bbsessionhash=%s\r\n\r\n", BORDID, SERVER_HOST, USER_AGENT, CLIENT_ACCEPT, CLIENT_LANGUAGE, CLIENT_CHARSET, SERVER_HOST, BORDID, bblasturl, ltime, rtime, cnzz_eid, bblastvisit, bblastactivity, PHPSESSID, bbsessionhash);

DoneWithList();

/* my fifth request */

memset(request, 0, 1024);

sprintf(request, "POST /bbs/newthread.php HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nAccept: %s\r\nAccept-Language: %s\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: %s\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nReferer: http://%s/bbs/newthread.php?do=newthread&f=%d\r\nCookie: bblasturl=%s; ltime=%s; rtime=%s; cnzz_eid=%s; bblastvisit=%s; bblastactivity=%s; PHPSESSID=%s; bbsessionhash=%s; bbforum_view=%s\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 232\r\n\r\n%s%d", SERVER_HOST, USER_AGENT, CLIENT_ACCEPT, CLIENT_LANGUAGE, CLIENT_CHARSET, SERVER_HOST, BORDID, bblasturl, ltime, rtime, cnzz_eid, bblastvisit, bblastactivity, PHPSESSID, bbsessionhash, bbforum_view, postmsg, BORDID);

DoneWithList();

exit(0);

}

阅读(6193) | 评论(12) | 转发(0) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值