西理工的网通让我头痛

需要面对面帮助?请寻求当地校园社团支持!
回复
run612
帖子: 5
注册时间: 2009-09-20 9:08

西理工的网通让我头痛

#1

帖子 run612 » 2009-09-22 9:35

我是学飞菜鸟,前天刚入手。装系统用wubi,很好用,不到20分钟就装好了,一点问题也没有。
但是当我想在ubuntu 上网的时候问题就出现了,先是连不上网,照前面高手说的,建一个dsl,结果能连上了。
可是,我用了两个上午装wincap插件,也就是ishare.exe。请教了学校的高手,用wine装,也装上了,运行时老是说缺少那4个.dll文件,我也cp过去了,在.wine/drive_c/windows/system32/里ls之后也能看到那 4个.dll。但当我在.wine/dirve_c/Program\ Files/PPOE/里运行wine ishare_user.exe时还是说缺少那几个.dll。
请高手们指教一下!!posting.php?mode=post&f=134#
菜鸟学飞,请多关照
zhoutao_1001
帖子: 2
注册时间: 2009-05-01 16:38

Re: 西理工的网通让我头痛

#2

帖子 zhoutao_1001 » 2009-09-28 6:27

将下面的源码用GCC编译,在pppoe拨号之后运行程序(pppoe需要设定DNS服务器,在xp里面控制台-ipconfig /all,得到的两个地址都写上)
#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <net/ethernet.h>
#include <signal.h>
#include <netinet/ip.h>

typedef struct _code2 {
char sign;
char type;
short len;
int id;
int code0;
int code1;
}code2;

typedef struct _code3 {
char sign;
char type;
short len;
int id;
int unk0;
int code1;
int unk1;
int code0;
int check;
int unk2;
char mac[6];
char dhcp;
char devtype;
int ipaddr;
int netmask;
char padding[48];
}code3;

int waitdata(int hsocket, int time)
{
fd_set fds;
struct timeval tv;

FD_ZERO(&fds);
FD_SET(hsocket,&fds);
tv.tv_usec = time;
tv.tv_sec = 0;
return select(hsocket+1,&fds,NULL,NULL,&tv);
}


main (int argc, char* argv[])
{
struct in_addr ip, netmask;
char mac[6];
int hsocket;
struct ifreq ifr;
struct sockaddr_in sin;
struct sockaddr *sa = (struct sockaddr *) &sin;
int fromlen;
struct sockaddr_in *sin_ptr;
u_char *ptr;
u_long *ptr_long;
int n,workwell = 0;
int check;
char c1[] = {7,1,8,0,1,0,0,0};
code2 c2;
code3 c3;
char c4[512];
int sendlen, recvlen;
printf("\nFree Dr.COM for Linux v0.2\n mengxp ");
if ((hsocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
perror( "socket error!");
return 0;
}
strcpy(ifr.ifr_name, "ppp0");
if (ioctl(hsocket, SIOCGIFADDR, &ifr) < 0)
perror("ioctl SIOCGIFADDR error");
sin_ptr = (struct sockaddr_in *)&ifr.ifr_addr;
ip = sin_ptr->sin_addr;

if (ioctl(hsocket, SIOCGIFNETMASK, &ifr) < 0)
perror("ioctl SIOCGIFNETMASK error");
sin_ptr = (struct sockaddr_in *)&ifr.ifr_addr;
netmask = sin_ptr->sin_addr;
memset(&mac,0,6);

printf("ppp0 interface:\n");
printf(" IP: %s\n", inet_ntoa(ip));
printf(" NetMask: %s\n\n", inet_ntoa(netmask));

sin.sin_addr = ip;
sin.sin_port = htons(61440);
sin.sin_family = AF_INET;
if ((bind(hsocket,sa,sizeof(sin))) < 0)
{
printf( "can't bind port 61440!\n");
return 0;
}
sin.sin_addr.s_addr = inet_addr("1.1.1.1");
keepalive:
if(!workwell)
printf("Try to connect Dr.COM Server...\n");
while(1)
{
sendlen = sendto(hsocket,&c1,8,0,sa,sizeof(sin));
if(sendlen < 0)
perror("send1 ");
if(waitdata(hsocket,1000*1000))
{
fromlen = sizeof(sin);
recvlen = recvfrom(hsocket,&c2,sizeof(c2),0,sa,&fromlen);
ip = sin.sin_addr;
break;
}
else
printf("recv2 timed out\n");
}
memset(&c3,0,96);
c3.sign = 7;
c3.len = 96;
c3.id = 3;
c3.code1 = c2.code1;
c3.unk1 = 0x2000200;
c3.code0 = c2.code0;
c3.check = 0x1312fc7;
c3.unk2 = 0x7e;
memcpy(&c3.mac,&mac,6);
c3.devtype = 0x17;
memcpy(&c3.ipaddr,&ip,4);
memcpy(&c3.netmask,&netmask,4);

ptr_long = (u_long *)&c3;
for(n=0,check=0;n<96/4;n++)
check ^= *(ptr_long + n);
c3.check = check * 0x12C4B7E;
c3.unk2 = 0;

ptr = (u_char *)&c3.mac;
for(n=0;n<64;n++)
*(ptr + n) = (*(ptr + n) >> 8 - (n & 7)) + (*(ptr + n) << (n & 7));

sendlen = sendto(hsocket,&c3,96,0,sa,sizeof(sin));
if(sendlen < 0)
perror("send3 ");
if(waitdata(hsocket,1000*1000))
{
fromlen = sizeof(sin);
recvlen = recvfrom(hsocket,&c2,sizeof(c2),0,sa,&fromlen);
if(!workwell)
{
printf("Connected,Keeping connection active...\n");
workwell = 1;
}
}
else
{
printf("recv4 timed out\n");
sleep(1);
goto keepalive;
}
sleep(15);
goto keepalive;
return 0;
}
回复