各位前辈,小弟昨日刚在本机上装了Suse L.inux 10.1。由于所在小区使用的是中电飞华的电力宽带,上网是通过中电飞华自己的.客.户端软件来进行认证登录,在这种情况下linux无法上网(中电飞华的工程师曾明确地表示过linux目前无法使用电力宽带)。我不得不再次使用windows上网,经过google和baidu,也查到一些关于这个问题的解决办法。(真抱歉,有些.长,.麻烦大家看完哈) 电子
方法1) .一位叫马路.遥maluyao的前辈曾经写过一篇解决这个问题的帖子:北京中电飞华电力猫在Linux/Unix 下上网的解决方案 。这个方案是通过写个小程序来实现网络的登录。程序包.括2个文件:.
“.先用写了个脚本(在同一行里) [成人用品]
curl -s -d "username=MY_USER_NAME&password=MYPASSWORD&serviceID=0&webserviceID=0&tempID=0"http://211.160.92.162/login.cgi grep SessionID |grep VALUE |awk -F '=' '{print $3}' |awk -F '>' '{print $1}' 虚拟主机
我把这个脚本命名为feihua.sh ,加上755 的权限,放到/.usr/local/bin 里。当然要把MY_USER_NAME.和MYPASSWORD换成自己的用.户名和密码。 [成人用品]
这个脚本的返回结果就.是sessionid. 电脑
用C语言写了下列程序。本人的C 语.言.比较菜。仅仅是对付能用.(程序名称为plc.c ,放在最后) 投资
gcc plc.c -o /usr/local/bin./plc. <性病>
程序在Redhat AS4 上编译和运行都没问题,希望使用其他.版本Linux 、Fr.eeBSD以及其他Unix 的朋友们也帮我测试一下。 <性病>
执行:
fie.hua.sh |plc 教育
这样就可以成功认证了 ”
其中帖子.中所述PLC.C的代码如下:域名
//plc.c
#include <sys./socket..h> [成人用品]
#include. <netinet/.in.h> 鲜花
#include <netdb.h>. .
#inclu.de <stdio.h> 美容
#include . <unistd.h> .
#define F.IRST 0 女人
#defin.e LAST 1 域名
int main(int argc,ch.ar *argv[]){. .
. char *host; .
. int sockfd; 电子
int len,r.esult; 外贸
st.ruct sockaddr_.in address; .
struct ho.stent *hos.tinfo; 汽车
.struct .servent *servinfo; 电脑
char buffer[1.0]; 汽车
int sid;
.scanf("%d",&sid.); //读入sessionid ,用管道读入就最简单了 教育
/./ prin.tf("sid is %d\n",sid); 学习
. host="211.160.92.162";. //服务器地址 服务器
hostinfo=get.hostbyname(host); //直接.用ip的时候应该不用gethostbayname吧?但我不知道。 外汇
/* .因为笔者的socket编程水平.实在比较菜,所以必需在/etc/services 中加入一行: 服务器
plc . 8.090/udp .
. 才能用下边的程序,那位大侠帮我改改。 .
其实就是要向服务器的809.0端口.发个包而已。 外汇
*/
servinfo=g.etservbyna.me("plc","udp");//老土了。 .
sockfd=socke.t(AF_INET,SOCK_DGR.AM,0); .
address.si.n_family.=AF_INET; 电子
address.sin_p.or.t=servinfo->s_port; .
address.sin_addr=*(struct in._addr *)*hostinfo-.>h_addr_list; .
len=size.of(address); .
buffer[0]=.0x05;/./第一个字段的数据 服务器
int i;
for (i=2;i<.7;i++) 健康
buffer=0x00;. ( 游戏 )
.buffer[8]=session(sid,F.IRST); .
buffer[9.]=session(sid,L.AST); .
/* .根据s.essionid 算出最后两个数据的内容 */ 乙肝
printf(. "%d \n",sessi.on(sid,FIRST));//倒数第二个字段的数据 .
printf( "%d .\n",ses.sion(sid,LAST));//最后一个字段的数据 --------------彩票
while(1){
buffer[1]=add(); .//每次加一个数。从零开始,.没有考虑超过256分钟的情况。 电子
resu.lt=sendto(sockfd,.buffer,10,0,(struct sockaddr *)&address,len); .
sleep(60);//等待60秒,应该有更好.的方法.吧。俺还不会用C的定时器。 外贸
}
exit(0);
}.//end of main --- 印刷
int session(const int sid,const i.nt flag){. .
if(flag=.=FIRST) .
return (sid&65280)>>8; //.倒数第二个字段, 6528.0 is 1111111100000000 服务器
else
return (sid&.255); //最后.一个字段。 .
}
int add(){
s.tatic i=-1; 电影
i++;
return i;
}
我按照帖子所提供的方法去做,但程序好像在编译时就报错了.。我对.编程一窍不通,不知道问题出在什么地方。教育
方法2) 因为中电飞华的客户端是个小程序,据.网上信息描述,是个在.net下写成的。有网友建议安装.wine,然后再运行.那个客户端文件。目前我还没有尝试这个方法,不知是否有用。(广告)
上面就是小弟目前所掌握的信息,请各位前辈给予.帮助.,谢谢拉。.