请大家多多指教。
首先来在vi下编辑C文件wxcatv.c:
#include
#include
#include
#include
#include
#include
#include
#include
#define WEBSERVPORT 80
#define MAXDATASIZE 4096
#define TEST_HOST "www.thmz.com"
#define POST_HOST "10.161.255.21"
#define POST_USID "######" //输入6位帐号
#define POST_PASS "######" //输入6位密码
#define TEST_MSG
"GET / HTTP/1.1rn
Accept: image/gif, image/jpeg, image/pjpeg, */*rn
Accept-Language: zh-cnrn
Accept-Encoding: gzip, deflatern
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)rn
Host: %srn
Connection: Keep-Alivernrn"
#define TEST_RET
"HTTP/1.1 302 Moved Temporarilyrn
Cache-Control: no-cachern
Location: http://%srn
Content-Type: text/htmlrn
Content-Length: 0rn
Connection: closernrnrn"
#define POST_MSG
"POST / HTTP/1.1rn
Accept: image/gif, image/jpeg, image/pjpeg, */*rn
Referer: http://%s/rn
Accept-Language: zh-cnrn
Content-Type: application/x-www-form-urlencodedrn
Accept-Encoding: gzip, deflatern
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)rn
Host: %srn
Content-Length: 51rn
Connection: Keep-Alivern
Cache-Control: no-cachernrn
DDDDD=%s&upass=%s&0MKKey=%B5%C7%C2%BC+Login"
int testlink(void)
{
int iloop;
int sockfd;
struct hostent *host;
struct sockaddr_in serv_addr;
int ret;
int iLength;
char buf[MAXDATASIZE];
char *Message;
char *received;
for(;;)
{
if((host = gethostbyname(TEST_HOST)) == NULL)
{
iloop ++;
if (iloop > 15)
{
perror("testLink gethostbyname error");
return(1);
}
sleep(2);
}
else
{
break;
}
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("testLink socket error");
return(1);
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(WEBSERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero), 8);
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{
perror("testLink connect error");
return(1);
}
if ((Message = malloc(MAXDATASIZE)) == NULL)
{
perror("testLink malloc Message error");
return(1);
}
sprintf(Message, TEST_MSG, TEST_HOST);
send(sockfd, Message, strlen(Message), 0);
realloc(Message, sizeof(Message));
iLength = recv(sockfd, buf, sizeof(buf), 0);
buf[iLength] = ';
close(sockfd);
if ((received = malloc(MAXDATASIZE)) == NULL)
{
perror("testLink malloc received error");
return(1);
}
sprintf(received, TEST_RET, POST_HOST);
ret = strncmp(buf, received, iLength);
realloc(received, sizeof(received));
return(ret);
}
int logonyxt(void)
{
int sockfd;
struct hostent *host;
struct sockaddr_in serv_addr;
int ret;
int iLength;
char buf[MAXDATASIZE];
char *Message;
if((host = gethostbyname(POST_HOST)) == NULL)
{
perror("logonyxt gethostbyname error");
return(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("logonyxt socket error");
return(1);
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(WEBSERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero), 8);
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{
perror("logonyxt connect error");
return(1);
}
if ((Message = malloc(MAXDATASIZE)) == NULL)
{
perror("logonyxt malloc Message error");
return(1);
}
sprintf(Message, POST_MSG, POST_HOST, POST_HOST, POST_USID, POST_PASS);
send(sockfd, Message, strlen(Message), 0);
realloc(Message, sizeof(Message));
iLength = recv(sockfd, buf, sizeof(buf), 0);
buf[iLength] = ';
close(sockfd);
return(0);
}
int main(void)
{
if (testlink() == 0)
{
return(logonyxt());
}
return(0);
}
现在编译c文件
#cc wxcatv.c -o wxcatv
将wxcatv 拷贝到/usr/bin/目录下
接下来在vi下编辑SH文件catv:
#! /bin/bash
#
#
case "$1" in
*start)
exec /usr/bin/wxcatv
exit 0
;;
*)
echo $"Usage: $0 {start}"
exit 1
;;
esac
保存到/etc/init.d目录下
分别连接到rc3 rc5目录下创建自启动。
现在可以了自动连接了。
在红帽AS4、CentOS下通过。
