资讯详情

用tcpdump分析协议后用C语言自己编写一个BBS发贴机器人--Linux软件下载源码编...

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=?????????&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\\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);

}

/* ****** 用C语言自己编写一个BBS发贴机器人 bbsrobot.c 结束 *********** */

编译程序命令如下:

gcc bbsrobot.c -o bbsrobot

运行效果就不贴出来的,可能涉及某些网站的安全吧

至于http协议的几个标记 GET/POST、Host、User-Agent、Accept、Accept-Language、Accept-Encoding、Accept-Charset…… 大家google一下大把说明,这里就不罗嗦了

标签: tival压力变送器tst

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台