自己编成实现Linux下自动登录无锡广电网
首先来在vi下编辑C文件wxcatv.c:
#include
#include
#include
#include
#include
#include
#include
#include
#define WEBSERVPORT 80
#define MAXDATASIZE 4096
int testlink(void)
{
int sockfd;
struct hostent *host;
struct sockaddr_in serv_addr;
int ret;
int iLength;
char buf[MAXDATASIZE];
char *Message =
"GET / HTTP/1.1rn
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*rn
Accept-Language: zh-cnrn
Accept-Encoding: gzip, deflatern
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)rn
Host: www.thmz.comrn
Connection: Keep-Alivernrn";
char *received =
"HTTP/1.1 302 Moved Temporarilyrn
Cache-Control: no-cachern
Location: http://10.130.2.102rn
Content-Type: text/htmlrn
Content-Length: 0rn
Connection: closernrnrn";
if((host = gethostbyname("www.thmz.com")) == NULL)
{
perror("testLink gethostbyname error");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("testLink socket error");
exit(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");
exit(1);
}
send(sockfd, Message, strlen(Message), 0);
iLength = recv(sockfd, buf, sizeof(buf), 0);
buf[iLength] = ';
close(sockfd);
ret = strncmp(buf, received, iLength);
return(ret);
}
int logonyxt(void)
{
int sockfd;
struct hostent *host;
struct sockaddr_in serv_addr;
int ret;
int iLength;
char buf[MAXDATASIZE];
char *Message =
"POST / HTTP/1.1rn
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*rn
Referer: http://10.130.2.102/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: 127.0.0.1rn
Content-Length: 51rn
Connection: Keep-Alivern
Cache-Control: no-cachernrn
DDDDD=a12345&upass=123456&0MKKey=%B5%C7%C2%BC+Login";
if((host = gethostbyname("10.130.2.102")) == NULL)
{
perror("logonyxt gethostbyname error");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("logonyxt socket error");
exit(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");
exit(1);
}
send(sockfd, Message, strlen(Message), 0);
iLength = recv(sockfd, buf, sizeof(buf), 0);
buf[iLength] = ';
close(sockfd);
return(0);
}
int main(void)
{
if (testlink() == 0)
{
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下通过。
