static int connect(rdma_ctx_t ctx, char* ip_addr, int port) { int retval; struct sockaddr_in servaddr; u8 IP[4] = {}; retval = translate_ip(ip_addr, IP); if (retval != 0) return -1; // create retval = sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &ctx->sock); CHECK_MSG_RET(retval == 0, "Error creating socket", -1); // connect memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); servaddr.sin_addr.s_addr = htonl(create_address(IP)); CHECK_MSG_RET(ctx->sock != 0, "Error creating socket", -1); CHECK_MSG_RET(ctx->sock->ops->connect != NULL, "Connect not found", -1); LOG_KERN(LOG_INFO, ("connecting to %s\n", ip_addr)); retval = ctx->sock->ops->connect(ctx->sock, (struct sockaddr *)&servaddr, sizeof(servaddr), 0); LOG_KERN(LOG_INFO, ("connected retval: %d\n", retval)); CHECK_MSG_RET(retval == 0, "Error connecting", -1); return 0; }
long int read_ip(void (*fptr)()){ long int status=-1; char stdin[15]; while(status==-1){ fptr(); printf("\n.==============================================."); printf("\n|IP Addres: |"); printf("\n| Cualquiera: 0 |"); printf("\n| Salir : S/s |"); printf("\n\'==============================================\'"); printf("\n>> "); scanf("%s",stdin); if(stdin[0]=='s'|| stdin[0]=='S') return -1; status=translate_ip(stdin); } return status; }
/*OPREACION IP,PUERTO, DIRECCION *OPREACION: 1 ADD * 2 DEL */ void extern_program(char *argv[]){ printf("XTERM %s\n", argv[1]); char *token = argv[1]; new_comunication(); if(strcmp(token,"ADD")==0) add_rule(); else if(strcmp(token,"DEL")==0) del_rule(); else exit(1); char *ipstr=argv[2]; long int ip=translate_ip(ipstr); printf("IP:%s %ld\n",ipstr,ip); char *aux=argv[3]; long int puerto=atol(aux); printf("PUERTO: %ld\n", puerto); char *sentido=argv[4]; printf("WAY: %s\n", sentido); send_msg(ip,puerto,sentido[0]); }
int main(int argc, char *argv[]) { IPHEADER *ip_header = NULL; int optval = 1; DWORD dwLen = 0; char packet[LS_MAX_PACKET_SIZE]; int iRet = 0; int ip_header_size = 0; char ipSrc[20], ipDest[20], thisIP[20]; BOOL bShowTCP = TRUE, bShowICMP = TRUE; // Check arguments if ( _argc > 1 ) { if ( !_stricmp(argv[1], "icmp") ) bShowTCP = FALSE; else if ( !_stricmp(argv[1], "tcp") ) bShowICMP = FALSE; else { printf( "\nUsage lsniff [ICMP|TCP]\n" ); exit(0); } } USocket us; us.init(); us.create(AF_INET, SOCK_RAW, IPPROTO_IP); memset( thisIP, 0x00, sizeof(thisIP) ); get_this_machine_ip(thisIP); struct sockaddr_in sock_sniff; sock_sniff.sin_family = AF_INET; sock_sniff.sin_port = htons(0); // If your machine has more than one IP you might put another one instead thisIP value sock_sniff.sin_addr.s_addr = inet_addr(thisIP); us.bind((struct sockaddr *)&sock_sniff); // Set socket to promiscuous mode // setsockopt wont work ... dont even try it if ( WSAIoctl( us, SIO_RCVALL, &optval, sizeof(optval), NULL, 0, &dwLen, NULL, NULL ) == SOCKET_ERROR ) { printf( "Error: WSAIoctl = %ld\n", WSAGetLastError() ); exit(-3); } while ( TRUE ) { memset( packet, 0x00, sizeof(packet) ); iRet = us.recv( packet, LS_MAX_PACKET_SIZE); if ( iRet < sizeof(IPHEADER) ) continue; ip_header = (IPHEADER *)packet; // I only want IPv4 not IPv6 if ( LS_HI_PART(ip_header->ver_ihl) != 4 ) continue; ip_header_size = LS_LO_PART(ip_header->ver_ihl); ip_header_size *= sizeof(DWORD); // size in 32 bits words // Checks the protocol IP is encapsulating memset( ipSrc, 0x00, sizeof(ipSrc) ); memset( ipDest, 0x00, sizeof(ipDest) ); translate_ip(ip_header->source_ip, ipSrc); translate_ip(ip_header->destination_ip, ipDest); // Read http://www.ietf.org/rfc/rfc1700.txt?number=1700 switch( ip_header->protocol ) { case 1: // ICMP if ( bShowICMP ) { printf("\n -------------------- // -------------------- "); printf("\n IP Header:"); printf("\n Source IP: %s", ipSrc); printf("\n Destination IP: %s", ipDest); printf("\n ICMP Header:"); decode_icmp(&packet[ip_header_size]); } break; case 6: // TCP if ( bShowTCP ) { printf("\n -------------------- // -------------------- "); printf("\n IP Header:"); printf("\n Source IP: %s", ipSrc); printf("\n Destination IP: %s", ipDest); printf("\n TCP Header:"); decode_tcp(&packet[ip_header_size]); } break; case 17: // UDP break; default: break; } } // end-while us.cleanup(); getchar(); return 0; }