- 论坛徽章:
- 0
|
- 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: [url]http://%s/bbs/[/url]\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: [url]http://%s/bbs/[/url]\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: [url]http://%s/bbs/f%d.html[/url]\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: [url]http://%s/bbs/f%d.html[/url]\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: [url]http://%s/bbs/newthread.php?do=newthread&f=%d[/url]\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一下大把说明,这里就不罗嗦了
[ 本帖最后由 mq110 于 2006-7-25 06:53 编辑 ] |
|