示例#1
0
int dns_resolution(char * dns_str)
{
	char ip_dest[16]="";
	struct hostent *h;
	
	sys_log(FUNC, LOG_DBG, " %s", "dns start :)");	

	if (ip_check(dns_str) == TRUE){
		h = gethostbyname(dns_str);	
		g_conf_info.con_server.server_ip = sys_str2ip(inet_ntoa(*((struct in_addr *)h->h_addr_list[0])));
		strcpy(g_conf_info.con_server.dns_str, dns_str);
		sys_log(FUNC, LOG_MSG, " %s", "DNS  OK gethostbyname");	
		return DNS_OK;
	}else if (strlen(g_conf_info.con_server.dns_str) !=0 ){
		if (its_dns(dns_str, g_conf_info.con_net.dns[0], ip_dest) == DNS_OK){
			 g_conf_info.con_server.server_ip = sys_str2ip(ip_dest);
			 sys_log(FUNC, LOG_MSG, " %s", "DNS  OK  its_dns:)");	
			 return DNS_OK;
		}else{
			sys_log(FUNC, LOG_ERR , " %s", "DNS  FAILED :(");
			return DNS_FAILED;
		}
		
	}
	return DNS_FAILED;	
}
示例#2
0
static void hdl_nopen(void)
{
	int8 type=0;
	uint8 DstIP[4], *dip = NULL;
	uint16 SrcPort, DstPort = 0;

	if(atci.tcmd.sign == CMD_SIGN_NONE) atci.tcmd.sign = CMD_SIGN_QUEST;
	if(atci.tcmd.sign == CMD_SIGN_QUEST)
	{
		CMD_CLEAR();
		act_nopen_q();
	}
	else if(atci.tcmd.sign == CMD_SIGN_INDIV) RESP_CR(RET_WRONG_SIGN);
	else if(atci.tcmd.sign == CMD_SIGN_EQUAL)
	{
		if(CMP_CHAR_3(atci.tcmd.arg1, 'S', 'C', 'U')) RESP_CDR(RET_WRONG_ARG, 1);
		if(port_check(atci.tcmd.arg2, &SrcPort) != RET_OK) RESP_CDR(RET_WRONG_ARG, 2);

		if(atci.tcmd.arg1[0] == 'C') {
			if(ip_check(atci.tcmd.arg3, DstIP) != RET_OK) RESP_CDR(RET_WRONG_ARG, 3);
			if(port_check(atci.tcmd.arg4, &DstPort) != RET_OK) RESP_CDR(RET_WRONG_ARG, 4);
			dip = DstIP;
		} else if(atci.tcmd.arg1[0] == 'U') {
			if(atci.tcmd.arg3[0] != 0 && atci.tcmd.arg4[0] != 0) {
				if(ip_check(atci.tcmd.arg3, DstIP) != RET_OK) RESP_CDR(RET_WRONG_ARG, 3);
				if(port_check(atci.tcmd.arg4, &DstPort) != RET_OK) RESP_CDR(RET_WRONG_ARG, 4);
				dip = DstIP;
			} else {
				CHK_ARG_LEN(atci.tcmd.arg3, 0, 3);
				CHK_ARG_LEN(atci.tcmd.arg4, 0, 4);
			}
		} else {	// 'S'	무시정책이냐 아니면 전부 확인 정책이냐
			CHK_ARG_LEN(atci.tcmd.arg3, 0, 3);
			CHK_ARG_LEN(atci.tcmd.arg4, 0, 4);
		}

		CHK_ARG_LEN(atci.tcmd.arg5, 0, 5);
		type = atci.tcmd.arg1[0];
		CMD_CLEAR();
		act_nopen_a(type, SrcPort, dip, DstPort);
	}
	else CRITICAL_ERRA("wrong sign(%d)", atci.tcmd.sign);
}
示例#3
0
void check(char *path, char *delim)
{
	length_check(path);
	symbols_check(path);

	char *subpath[10];
	int count, i;

	count = stok(path, delim[0], subpath);
	for (i = 0; i < count; i++) {
		domen_check(subpath[i]);
		ip_check(subpath[i]);
	}
	suntok(path, delim[0], subpath, count);
}
示例#4
0
int udp_check_send(char *ip, int dport, int hport)
{
	if(!ip_check(ip)){
		printf("invalid ip or not set: %s \n", ip);
		return 0;
	}
	if(dport <= 0 || dport > 65000){
		printf("invalid dport or not set: %d \n", dport);
		return 0;
	}
	if(hport < 0 || hport > 65000){
		printf("invalid hport: %d \n", hport);
		return 0;
	}
	return 1;
}
示例#5
0
文件: netool.c 项目: jwrho/neom2m
int MNet_getDomainIP(char* domain, char* ip)
{
    struct hostent *host_entry;
    int             ndx;

    host_entry = gethostbyname(domain);

    if ( !host_entry)
    {
        //printf( "gethostbyname() fail/n");
        return 0;
    }
    
    //for ( ndx = 0; NULL != host_entry->h_addr_list[ndx]; ndx++)
    sprintf( ip, "%s", inet_ntoa( *(struct in_addr*)host_entry->h_addr_list[0]));
    
    return ip_check(ip);

}
示例#6
0
static void hdl_nsend(void)
{
	int8 num = -1;
	int32 ret;
	uint8 *dip = NULL;
	uint16 *dport = NULL;

	if(atci.tcmd.sign == CMD_SIGN_NONE) RESP_CR(RET_WRONG_SIGN);
	if(atci.tcmd.sign == CMD_SIGN_QUEST) RESP_CR(RET_WRONG_SIGN);
	else if(atci.tcmd.sign == CMD_SIGN_INDIV) RESP_CR(RET_WRONG_SIGN);
	else if(atci.tcmd.sign == CMD_SIGN_EQUAL)
	{
		if(atci.tcmd.arg1[0] != 0) {
			if(str_check(isdigit, atci.tcmd.arg1) != RET_OK) RESP_CDR(RET_WRONG_ARG, 1);
			if(CHK_DGT_RANGE(atci.tcmd.arg1, num, ATC_SOCK_NUM_START, ATC_SOCK_NUM_END)) 
				RESP_CDR(RET_RANGE_OUT, 1);
		}
		if(str_check(isdigit, atci.tcmd.arg2) != RET_OK || 
			(atci.sendlen = atoi((char*)atci.tcmd.arg2)) < 1 || 
			atci.sendlen > WORK_BUF_SIZE) RESP_CDR(RET_RANGE_OUT, 2);

		if(atci.tcmd.arg3[0]) {
			if(ip_check(atci.tcmd.arg3, atci.sendip) == RET_OK) dip = atci.sendip;
			else RESP_CDR(RET_WRONG_ARG, 3);
		}
		if(atci.tcmd.arg4[0]) {
			if(port_check(atci.tcmd.arg4, &atci.sendport)==RET_OK) dport = &atci.sendport;
			else RESP_CDR(RET_WRONG_ARG, 4);
		}

		CHK_ARG_LEN(atci.tcmd.arg5, 0, 5);
		CHK_ARG_LEN(atci.tcmd.arg6, 0, 6);
		CMD_CLEAR();
		ret = act_nsend_chk(num, &atci.sendlen, dip, dport);
		if(ret != RET_OK) return;

		atci.sendsock = num;	// 유효성 검사가 완료되면 SEND모드로 전환
		atci.worklen = 0;
		cmd_resp(RET_ASYNC, num);
	}
	else CRITICAL_ERRA("wrong sign(%d)", atci.tcmd.sign);
}
示例#7
0
static int8 mn_email(menu_ctrl mctrl, int8 *mbuf)
{
#define SET_STAGE(next_name_v, cur_var_v) \
{ \
	if(strlen((char*)mbuf) > 31) printf("buf overflow - try again\r\n"); \
	else { \
		strcpy((char*)cur_var_v, (char*)mbuf); \
		printf("Type a "next_name_v"\r\n"); \
		stage++; \
	} \
}
	uint8 ret;
	static uint8 stage = 0, ip[4];
	static int8 sender[32], passwd[32], recipient[32], subject[32];

	if(mctrl == MC_START) {
		printf("Enter Mail Server Address [Domain Name/IP Address]\r\n");
	} else if(mctrl == MC_END) {
		stage = 0;
	} else if(mctrl == MC_DATA) {
		switch(stage) {
		case 0:	// Server IP
			if(ip_check(mbuf, ip) == RET_NOK) {
				if(dns_query(SOCK_DNS, (void *)mbuf, ip) == RET_OK) {
					printf("DNS success - IP Address is (%d.%d.%d.%d)\r\n\r\n",	
						ip[0], ip[1], ip[2], ip[3]);
					printf("Type a Sender\r\n");
					stage = 1;
				} else {
					printf("DNS failed\r\n\r\n");
					printf("Enter Mail Server Address [Domain Name/IP Address]\r\n");
				}
			} else {
				printf("Type a Sender\r\n");
				stage = 1;
			}
			break;
		case 1:	// Sender
			SET_STAGE("Password", sender);
			break;
		case 2:	// Password
			SET_STAGE("Recipient", passwd);
			break;
		case 3:	// Recipient
			SET_STAGE("Subject", recipient);
			break;
		case 4:	// Subject
			SET_STAGE("message" , subject); 
			break;
		case 5:	// Message
			ret = send_mail(SOCK_SMTP, (uint8*)sender, (uint8*)passwd, 
				(uint8*)recipient, (uint8*)subject, (uint8*)mbuf, ip);
			if(ret == RET_OK) printf("mail send success\r\n");
			else printf("mail send fail\r\n");
			return RET_OK;
		default: printf("wrong stage(%d)\r\n", stage);
		}
	}

	return RET_NOK;

#undef SET_STAGE
}
示例#8
0
int main(int argc, char **argv)
{
    int ch = 0;
    char *ifname = NULL, *ip = NULL;;
    int type = 0, broadcast = 0, demon = 0;
    int ret = 0, len = 0;

    while((ch = getopt(argc,argv,"i:gbdh"))!= -1)
    {
        switch(ch) {
        case 'i':
            ifname = optarg;
            break;
        case 'g':
            type = 1;
            break;
        case 'b':
            broadcast = 1;
            break;
        case 'd':
            demon = 1;
            break;
        case 'h':
            usage();
            exit(0);
            break;
        default:
            fprintf (stderr, "invaild option: %c \n", ch);
            exit(0);
            break;
        }
    }
    if(optind < argc) {
        ip = argv[optind];
    }

    if(!ifname) {
        printf("error: no ifname \n");
        exit(0);
    }

    if(!type) {
        if(!ip) {
            printf("error: no ip \n");
            exit(0);
        }

        if(!ip_check(ip)) {
            printf("invaild ip: %s \n", ip);
            exit(0);
        }

        if( inet_aton(ip, (struct in_addr *)&cheat_ip) == 0 ) {
            printf("ip addr error \n");
            exit(0);
        }
    }

    if( get_info(ifname) < 0 ) {
        printf("get info failed \n");
        exit(0);
    }

    len = put_data(broadcast, type);

    if(demon)
        wf_demon(arp_exit_system);
    else
        wf_registe_exit_signal(arp_exit_system);

    if( init_sock(ifname) < 0) {
        printf("socket failed \n");
        exit(0);
    }

    while(1)
    {
        sleep(1);
        ret = send(sockfd, arp_data, len, 0);
        if(!demon)
            printf("ret of send: %d,  %s \n", ret, strerror(errno));
    }

    arp_exit_system();
    return 0;
}
void *connect_1(void *data1)
{
	//if (argc < 4){puts("error enter ip and port no.\n your id and your freinds id\n as 4 args \n"); exit(1);}
	struct args* data=(struct args *)data1;
//	puts(data->ip);
  //      puts(data->port);
	puts(data->u_id1);
        puts(data->u_id);
        puts(data->me_id);
	FILE *fd1,*fd2;
//      int asd=fork(); //just because a process can support a
                        // ltd no. of file des.
//      if (asd==0)
/*        {
                mkfifo("./temp/gui_fifo",0777);
                puts("1\n");
                (data->fd_gui)=fopen("./temp/gui_fifo","w");
//              printf("%d\n",data->fd_gui);
                perror("file:");
                 puts("2\n");
                (data->fd_chat)=fopen("./temp/chat_fifo","r");
                 puts("3\n");
                fwrite(data->ip,200,1,data->fd_gui);
                 puts("4\n");
                //write(data->fd_gui,data->port,100);
                fwrite(data->port,200,1,data->fd_gui);
                 puts("5\n");
                //write(data->fd_gui,data->u_id,100);
                fwrite(data->me_id,200,1,data->fd_gui);
                 puts("6\n");
                //write(data->fd_gui,data->me_id,100);
                fwrite(data->u_id,200,1,data->fd_gui);
                 puts("6\n");
//                talk(data);
        }
*/

        char ip[20],ip1[20];
        strcpy(ip,data->ip);
	strcpy(ip1,data->ip);
        //puts("\n\n check post \n\n");puts(ip);
        int valid = ip_check(2,ip,data->port);
        if (!valid) exit(1);
        int port=atoi(data->port);
        int sockfd;
        char msg[200];
        struct sockaddr_in server1;
//        sockfd=socket(AF_INET,SOCK_STREAM,0);
//        if (sockfd==-1)

/////////                perror("error in creating in socket\n");
	sockfd=socket(AF_INET,SOCK_STREAM,0);
	//printf("errno=%d\n",errno);
	int err=errno;
	perror("socket");
	printf("errno=%d\n",err);
        server1.sin_family=AF_INET;
	//puts("\n\n\n\n");puts(ip1);
        server1.sin_addr.s_addr = inet_addr(ip1);
        server1.sin_port=htons(port);
	memset(&(server1.sin_zero),'\0',8);
        connect(sockfd,(struct sockaddr *)&server1 ,sizeof(struct sockaddr));
		err=errno;
                perror("connection error\n");
		printf("errno=%d\n",err);////////////////////////////
// a diffrent way to connect :) :) :) :) :) :) :) :)//
/*	int status;
	struct addrinfo hints;
	struct addrinfo *res;
	memset(&hints,0,sizeof(hints));
	hints.ai_family=AF_INET;
	hints.ai_socktype =SOCK_STREAM;
	status= getaddrinfo(ip,data->port,&hints,&res);
	sockfd=socket(res->ai_family,res->ai_socktype,res->ai_protocol);
	perror("socket");
	res->ai_addr->sin_addr.s_addr=inet_addr(ip);
	connect(sockfd,res->ai_addr,res->ai_addrlen);
//	puts(res->ai_addr);
	perror ("connect");
//	puts(res->ai_addr);

//	 end of connect and socket//*/
        puts("connected\n");
        char msg_srvr[200];
        recv(sockfd,msg_srvr,200,0);
        puts(msg_srvr);
        send(sockfd,data->me_id,50,0);// my name
        send(sockfd,data->u_id,50,0);// my friend's name
	data->sockfd=sockfd;
	//GIOChannel *sfd;
	//sfd= g_io_channel_unix_new(sockfd);
//	g_io_add_watch(sfd,)
	int x;
//	x=fork();
//	if (x==0)
	{
//		puts("asdf");
//		char msgr[200];
//		while(1){
//		puts("step 5");
//		char msgr[200];
//		recv(sockfd,msgr,200,0);
//		puts("step 6");
//		puts(msgr);
//		GtkTextBuffer *buffer;
//		if (strcmp(msgr,"exit")==0);
//                        break;
//	        GtkTextMark *mark;
  //      	GtkTextIter iter;
//	        buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(data->entry1));
  //      	mark=gtk_text_buffer_get_insert(buffer);
//	        gtk_text_buffer_get_iter_at_mark(buffer,&iter,mark);
  //      	gtk_text_buffer_insert(buffer,&iter,msgr,-1);
	}
}
示例#10
0
static void hdl_nset(void)
{
	int8 mode, num = -1;
	uint8 ip[4];

	if(atci.tcmd.sign == CMD_SIGN_NONE) atci.tcmd.sign = CMD_SIGN_QUEST;	// x는 ?로 치환
	if(atci.tcmd.sign == CMD_SIGN_QUEST)
	{
		if(atci.tcmd.arg1[0] != 0) {
			if(str_check(isdigit, atci.tcmd.arg1) != RET_OK) RESP_CDR(RET_WRONG_ARG, 1);
			if(CHK_DGT_RANGE(atci.tcmd.arg1, num, 1, 6)) RESP_CDR(RET_RANGE_OUT, 1);
		}
		CMD_CLEAR();
		act_nset_q(num);
	}
	else if(atci.tcmd.sign == CMD_SIGN_INDIV)
	{
		if(atci.tcmd.arg1[0] != 0) {
			if(str_check(isdigit, atci.tcmd.arg1) != RET_OK) RESP_CDR(RET_WRONG_ARG, 1);
			if(CHK_DGT_RANGE(atci.tcmd.arg1, num, 1, 6)) RESP_CDR(RET_RANGE_OUT, 1);
			if(num == 1) {
				if(CMP_CHAR_2(atci.tcmd.arg2, 'D', 'S')) RESP_CDR(RET_WRONG_ARG, 2);
				mode = atci.tcmd.arg2[0];
				CMD_CLEAR();
				act_nset_a(mode, NULL, NULL, NULL, NULL, NULL);
			} else {
				if(ip_check(atci.tcmd.arg2, ip) != RET_OK) RESP_CDR(RET_WRONG_ARG, 2);
				CMD_CLEAR();
				switch(num) {
				case 2: act_nset_a(0, ip, NULL, NULL, NULL, NULL); return;
				case 3: act_nset_a(0, NULL, ip, NULL, NULL, NULL); return;
				case 4: act_nset_a(0, NULL, NULL, ip, NULL, NULL); return;
				case 5: act_nset_a(0, NULL, NULL, NULL, ip, NULL); return;
				case 6: act_nset_a(0, NULL, NULL, NULL, NULL, ip); return;
				default: CRITICAL_ERR("nset wrong num");
				}
			}
		} else RESP_CDR(RET_WRONG_ARG, 1);
	}
	else if(atci.tcmd.sign == CMD_SIGN_EQUAL)
	{
		uint8 sn[4], gw[4], dns1[4], dns2[4], *ptr[5];
		num = 0;
		if(atci.tcmd.arg1[0] != 0) {
			if(CMP_CHAR_2(atci.tcmd.arg1, 'D', 'S')) RESP_CDR(RET_WRONG_ARG, 1);
			else num++;
		}

#define NSET_ARG_SET(arg_p, addr_p, idx_v, ret_v) \
if(arg_p[0] != 0) { \
	num++; \
	if(ip_check(arg_p, addr_p) != RET_OK) RESP_CDR(RET_WRONG_ARG, ret_v); \
	ptr[idx_v] = addr_p; \
} else ptr[idx_v] = NULL

		NSET_ARG_SET(atci.tcmd.arg2, ip, 0, 2);
		NSET_ARG_SET(atci.tcmd.arg3, sn, 1, 3);
		NSET_ARG_SET(atci.tcmd.arg4, gw, 2, 4);
		NSET_ARG_SET(atci.tcmd.arg5, dns1, 3, 5);
		NSET_ARG_SET(atci.tcmd.arg6, dns2, 4, 6);
		if(num == 0) RESP_CR(RET_NOT_ALLOWED);
		mode = atci.tcmd.arg1[0];
		CMD_CLEAR();
		act_nset_a(mode, ptr[0], ptr[1], ptr[2], ptr[3], ptr[4]);
	} 
	else CRITICAL_ERRA("wrong sign(%d)", atci.tcmd.sign);
}
示例#11
0
int main(int argc, char * argv[1])
{
	if (argc < 4){puts("error enter ip and port no.\n your id and your freinds id\n as 4 args \n"); exit(1);}
	char ip[20];
	strcpy(ip,argv[1]);
	puts(ip);
	int valid = ip_check(argc,ip,argv[2]);
	if (!valid) exit(1);
	int port=atoi(argv[2]);
	int sockfd;
	char msg[200];
	struct sockaddr_in server;
	sockfd=socket(AF_INET,SOCK_STREAM,0);
	if (sockfd==-1)
		printf ("error in creating in socket\n");
	server.sin_family=AF_INET;
	server.sin_addr.s_addr = inet_addr(argv[1]);
	server.sin_port=htons(port);
	if (connect(sockfd,(struct sockaddr *)&server ,sizeof(server))<0)
		printf("connection error\n");
	puts("connected\n");
	char msg_srvr[200];
	recv(sockfd,msg_srvr,200,0);
	puts(msg_srvr);
	send(sockfd,argv[3],50,0);// my name
	send(sockfd,argv[4],50,0);// my friend's name
	int x=fork();
	if (x!=0)
	{
		while (1)
		{
			char msgs[200];
//			scanf("%[^\n]s",msgs);
			gets(msgs);//puts("\nhare");
//			if (!strcmp(msgs,NULL)) continue;
			if (!strcmp(msgs,"exit")) 
			{
                        /*      	 exit(1);
                                 close(sockfd);
                                 if (x!=0)
				if (send(sockfd,msgs,200,0)<0)
                                perror("send error:");
                                        kill(x,SIGTERM);*/
				if (send(sockfd,msgs,200,0)<0)
                                	perror("send error:");
				goto end;
                       }
			if (send(sockfd,(msgs),200,0)<0)
				perror("send error:");
			memset(msgs,'\0',200);
		}
	}
	else
	{
		char msgr[200];
		while(1) {
		if (recv(sockfd,msgr,200,0)<0)
		{
			printf ("recvin failed\n");
			perror("recv :: ");
			return 1;
		}
		else
		{
			printf("he/she ::");
			printf ("%s\n",msgr);
		}
		if (!strcmp(msgr,"exit"))
		{
                               /* exit(1);
                                 close(sockfd);
                                 if (x!=0)
                                   kill(x,SIGTERM);*/
				printf("other side logged off\n");
				goto end;
                }
		}
	}
	//printf("msg reply ::%s \n",msg);
	//char msg_r[2000]="\nhiiiii thanks for connection\n";
//	if (send(sockfd,msg_r,200,0)<0&&printf ("kumar\n"))
//		printf ("message not sent\n");
//	int x;
	//printf ("for reply enter :: r\n");
//	printf("please enter 200 char at a time only\n");
//	printf ("to exit press ctrl + c");
/*	while(1)
	{
		char msg_s[250],msg_r[250];
		scanf("%s",msg_s);
		if (send(sockfd,msg_s,250,0)<0)
			printf ("msg not sent\n");
		if (recv(sockfd,msg_r,250,0)<0)
			printf ("recv error\n");
			int retr=system(msg_r);
			return (retr);
		puts(msg_r);
	}*/
//	puts("reply \n");
//	puts(msg_r);
	end:  ;
	puts("logging of chat\n");
	if (x!=0)
		kill(x,SIGTERM);
	close(sockfd);
	return 0;
}
示例#12
0
int cmd_wol(int argc, char **argv)
{
	int i=1, ret=0;
	int port = 9;
	char *ip = NULL, *pmac = NULL, *if_name = NULL;
	char broad[16] = "255.255.255.255";
	unsigned char mac[6] = {0}, pwd[6] = {0};
	unsigned char data[108] = {0};
	int sock, len=102, have_pwd = 0;

	while(argv[++i])
	{
		if( strcmp(argv[i], "-i") == 0 && argv[++i]){
			ip = argv[i];
			if(!ip_check(ip)){
				printf("invalid ip: %s \n", argv[i]);
				return -1;
			}
		}
		else if( strcmp(argv[i], "-p") == 0 && argv[++i]){
			port = atoi(argv[i]);
			if(port <= 0 || port >= 65535){
				printf("invalid port: %s \n", argv[i]);
				return -1;
			}
		}
		else if( strcmp(argv[i], "-o") == 0 && argv[++i]){
			if_name = argv[i];
		}
		else if( strcmp(argv[i], "--passwd") == 0 && argv[++i]){
			if( str2mac(argv[i], pwd) < 0){
				printf("invalid pwd: %s \n", argv[i]);
				return -1;
			}
		}
		else{
			pmac = argv[i];
			if( str2mac(argv[i], mac) < 0){
				printf("invalid mac: %s \n", argv[i]);
				return -1;
			}
		}
	}

	memset(data, 0xff, 6);
	for(i=6; i<102; i+=6){
		memcpy(&data[i], mac, 6);
	}
	if(have_pwd){
		memcpy(&data[102], pwd, 6);
		len = 108;
	}

	if(NULL == ip)
		ip = &broad[0];

	ret = sock = wf_udp_socket(0, 1, if_name);
	if(sock > 0)
		ret = wf_sendto_ip(sock, data, len, 0, ip, port);
	printf("sending magic packet to %s:%d with %s %s%s \n", ip, port, pmac, ret<0 ? "[failed: " : "", ret<0 ? wf_socket_error(NULL) : "" );

	return 0;
}