Esempio n. 1
0
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 шлюза
}
Esempio n. 2
0
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;
}