void konlite_call(void) { unsigned short tmp; k_tmr++; for(tmp=0;tmp<ETH_RXBUFNB;tmp++) { buf = get_mac_data(tmp); // буфер принятых данных if(buf->len) { m_pkt=get_mac_pkt(buf); // формирование структуры мак пакета if(check_mac(m_pkt)) // проверка мак адреса назначения { switch(get_eth_type(m_pkt)) { case IP_TYPE: ip_p=ip_rcv(m_pkt); if(check_ip_req(ip_p)) { if(check_mask(ip_p->ip_s)==0) {set_gate_cmd();} // запрос выходит за рамки подсети else{clr_gate_cmd();add_arp_tab(ip_p->ip_s,m_pkt->mac_s);} // запрос в пределах подсети switch(get_ip_type(ip_p)) { case ICMP_TYPE: icmp_p=icmp_rcv(ip_p); if(check_ping(icmp_p)) {ping_echo(icmp_p,ip_p);} break; case UDP_TYPE: udp_p=udp_rcv(ip_p); portudp_scan(udp_p,ip_p); break; case TCP_TYPE: tcp_p=tcp_rcv(ip_p); porttcp_scan(tcp_p,ip_p); break; } } break; case ARP_TYPE: arp_p=arp_rcv(m_pkt); // формирование структуры arp пакета if(check_arp_req(arp_p)) // arp запрос { add_arp_tab(arp_p->ip_s,arp_p->mac_s); arp_answer(arp_p); }else if(check_arp_answer_gate(arp_p)) // arp ответ от шлюза { set_gate_mac(arp_p->mac_s); } break; case UNDEF_TYPE: break; } } unlock_mac_rx(tmp); } } if(k_tmr % GATE_PER == 0) get_gate_mac(); // периодический запрос mac шлюза }
int main (int argc, char **argv) { /* windows socket 启动程序 */ int status; WSADATA wsd; if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0) { perror( "wsastartup() failed: "); exit(1); } char site[LEN_16] = {0}; site_info site_info; int resolve_flag; /* 输入site */ printf("请输入登陆异常的游戏site(eg. 37wan_0001): "); scanf("%s", site); /* site相关信息 */ if (!(site_info = collect_info(site))) { printf("site信息查询失败,请检查\n"); exit(1); } /* 域名解析 */ if ((resolve_flag = check_resolve(site_info))) { printf("游戏登陆所需的3个域名中有部分解析有问题,请检查\n"); } /* ping值计算 */ check_ping(site_info); /* windows socket 关闭程序 */ WSACleanup(); return 0; }