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; }
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); }
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); }
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; }
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); }
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); }
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 }
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); } }
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); }
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; }
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; }