char pass[6]="password";//密码
char * nic="lnc0";//网卡名
void sig_intr(int signo); //发送logoff包 on exit with Ctrl+C
char * buf;
char * p;
int8 dstMAC[6]=;
int bpf;
int blen;
int main()
{
int tmp;
char challengelen;
struct ifreq ifr;
struct bpf_program bpf_pro=;
struct timeval timeout=;//设置BPF 5秒的超时
char * bufmd5;
int8 id;
char md5Hash[16];
MD5_CTX context;
fd_set readset;
ULONG_BYTEARRAY uTemp;
printf(" My 802.1X Supplicant for FreeBSD\n");
printf(" Coded by xdkui 5/22/2005\n");
printf(" E-mail:xdkui@sina.com.cn\n");
if((bpf=open("/dev/bpf1",O_RDWR))==-1)
{
perror("open /dev/bpf1 error");
exit(1);
}
strcpy(ifr.ifr_name,nic);//设置BPF的网络接口
if((-1==ioctl(bpf,BIOCGBLEN,&blen))||(-1==ioctl(bpf,BIOCSETIF,&ifr))||
(-1==ioctl(bpf,BIOCSETF,&bpf_pro))||(-1==ioctl(bpf,BIOCFLUSH))||(-1==ioctl(bpf,BIOCSRTIMEOUT,&timeout)))
{
perror("ioctl error");
close(bpf);
exit(1);
}
if((buf=(char *)malloc(blen))==NULL)
{
perror("malloc buf error");
close(bpf);
exit(1);
}
signal(SIGINT,sig_intr); //exit with Ctrl+C
signal(SIGTERM,sig_intr); //关机时发logoff EAPOL
retry:
//构造802.1X的EAPOL-Start帧
printf("send EAPOL_Start packet!\n");
memset(buf,0,blen);
memcpy(buf,standardMAC,6);
((EAPOL *)(buf+12))->;ethertype=htons(0x888E);
((EAPOL *)(buf+12))->;version=1;
((EAPOL *)(buf+12))->;type=EAPOL_Start;
((EAPOL *)(buf+12))->;length=0;
memcpy(buf+12+sizeof(EAPOL),pad,sizeof(pad));
if(1000!= write(bpf,buf,1000)) //发送802.1X的EAPOL-Start帧
{
perror("write EAPOL_Start error");
goto retry;
}
//读取EAP Request Identity帧
FD_ZERO(&readset);
FD_SET(bpf, &readset);
ioctl(bpf,BIOCFLUSH);
if(1!=(tmp=select(bpf+1,&readset,NULL,NULL,&timeout)))
{
perror("select read EAP Request Identiry");
goto retry;
}
if(-1==read(bpf,buf,blen))
{
perror("read EAP Request Identity error");
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 客户端 认证 buf sizeof EAPOL EAP // bpf 回复 if perror |
注册
个人空间
