Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
0
/*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]);
}
Exemplo n.º 4
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;
}