Advertisement
kernel_memory_dump

MultiCast UDP siluj ruter

Jan 25th, 2014
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.44 KB | None | 0 0
  1. /***************
  2.  
  3.  
  4. M-SEARCH * HTTP/1.1
  5. HOST: 239.255.255.250:1900
  6. MAN: ssdp:discover
  7. MX: 10
  8. ST: ssdp:all
  9.  
  10.  
  11. ************/
  12.  
  13. #define SEARCH_REQUEST_STRING "M-SEARCH * HTTP/1.1\r\n"            \
  14.                               "HOST: 239.255.255.250:1900\r\n"     \
  15.                               "MAN: ssdp:discover\r\n"             \
  16.                               "MX: 5    HANDLE thread = CreateThread(NULL, 0, printDevices, NULL, 0, NULL);\r\n"                          \
  17.                               "ST: ssdp:all\r\n"            \
  18.                               "\r\n"
  19.  
  20. #include <sys/types.h>   /* for type definitions */
  21. #include <winsock2.h>    /* for win socket API calls */
  22. #include <ws2tcpip.h>    /* for win socket structs */
  23. #include <stdio.h>       /* for printf() */
  24. #include <stdlib.h>      /* for atoi() */
  25. #include <string.h>      /* for strlen() */
  26. #include <windows.h>
  27.  
  28. #define MAX_LEN  1024    /* maximum string size to send */
  29. #define MIN_PORT 1024    /* minimum port allowed */
  30. #define MAX_PORT 65535   /* maximum port allowed */
  31.  
  32. /*******************************
  33.  
  34.  
  35. wai am I not getting ANY RESPONSE????
  36. lonely socket :(
  37.  
  38.  
  39. ***************************/
  40. DWORD WINAPI printDevices(void* data) {
  41.     printf("THREAD______AC_KTIVAN)\n");
  42.       int sock2;
  43.   struct sockaddr_in name;
  44.   struct hostent *hp, *gethostbyname();
  45.   char recvline[MAX_LEN];
  46.   struct ip_mreq mreq;
  47.   int rez;
  48.  
  49.    mreq.imr_multiaddr.s_addr = inet_addr("239.255.255.250");
  50.    mreq.imr_interface.s_addr = INADDR_ANY;
  51.  
  52.      // Create client address information and bind the multicast socket
  53.   name.sin_family = AF_INET;
  54.   name.sin_addr.s_addr = INADDR_ANY;
  55.   name.sin_port = htons(5555);
  56.   sock2 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  57.  
  58.   rez = bind(sock2,(struct sockaddr *)&name,
  59.                  sizeof(struct sockaddr));
  60.  
  61.   setsockopt(sock2, IPPROTO_IP, IP_ADD_MEMBERSHIP,
  62.                         (char*)&mreq, sizeof(mreq));
  63.  
  64.  
  65.  
  66.   int addr_len = sizeof(name);
  67.  
  68.   memset(recvline,0x00,sizeof(recvline));
  69.  
  70.  
  71.    
  72.     while(1){
  73.             recvfrom(sock2, recvline, sizeof(recvline), 0,
  74.                     (struct sockaddr *)&name, &addr_len);
  75.             printf("%sPAKET_____\n", recvline);
  76.     }
  77.  
  78.      
  79.  
  80.    /*
  81.     sock2 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  82.     name.sin_family = AF_INET;
  83.     name.sin_port = htons(3486);
  84.     name.sin_addr.s_addr = htonl(INADDR_ANY);
  85.      setsockopt(sock2, IPPROTO_IP, IP_ADD_MEMBERSHIP,
  86.                         (char*)&mreq, sizeof(mreq));
  87.     int iResult = bind(sock2, (SOCKADDR *) & name, sizeof (name));
  88.     if (iResult != 0) {
  89.         wprintf(L"bind failed with error %d\n", WSAGetLastError());
  90.         return 1;
  91.     }
  92.     */
  93.     /*
  94.     while(1){
  95.      recvfrom(sock2,recvline,sizeof(recvline),0,NULL,NULL);
  96.      printf("___DATA__STIGAO___MULTICAST___");
  97.       puts(recvline);
  98.     }
  99.     */
  100. }
  101.  
  102.  
  103. int main(int argc, char *argv[]) {
  104.  
  105.   int sock;                   /* socket descriptor */
  106.   char send_str[MAX_LEN] = SEARCH_REQUEST_STRING;    /* string to send */
  107.   char recvline[MAX_LEN*10];
  108.   struct sockaddr_in mc_addr; /* socket address structure */
  109.   int send_len;               /* length of string to send */
  110.   char* mc_addr_str;          /* multicast IP address */
  111.   unsigned short mc_port;     /* multicast port */
  112.   unsigned char mc_ttl=255;     /* time to live (hop count) */
  113.   WSADATA wsaData;            /* Windows socket DLL structure */
  114.   int izbor;
  115.  
  116.   int sock2;
  117.   struct sockaddr_in name;
  118.   struct hostent *hp, *gethostbyname();
  119.     HANDLE thread = CreateThread(NULL, 0, printDevices, NULL, 0, NULL);
  120.  
  121.   /* validate number of arguments */
  122.   if (argc != 3) {
  123.     fprintf(stderr,
  124.             "Usage: %s <Multicast IP> <Multicast Port>\n",
  125.             argv[0]);
  126.     exit(1);
  127.   }
  128.  
  129.   mc_addr_str = argv[1];       /* arg 1: multicast IP address */
  130.   mc_port     = atoi(argv[2]); /* arg 2: multicast port number */
  131.  
  132.   /* validate the port range */
  133.   if ((mc_port < MIN_PORT) || (mc_port > MAX_PORT)) {
  134.     fprintf(stderr, "Invalid port number argument %d.\n",
  135.             mc_port);
  136.     fprintf(stderr, "Valid range is between %d and %d.\n",
  137.             MIN_PORT, MAX_PORT);
  138.     exit(1);
  139.   }
  140.  
  141.   /* Load Winsock 2.0 DLL */
  142.   if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) {
  143.     fprintf(stderr, "WSAStartup() failed");
  144.     exit(1);
  145.   }
  146.  
  147.   /* create a socket for sending to the multicast address */
  148.   if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
  149.     perror("socket() failed");
  150.     exit(1);
  151.   }
  152.  
  153.   /* set the TTL (time to live/hop count) for the send */
  154.  
  155.   /*
  156.   if ((setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL,
  157.       (const char*) &mc_ttl, sizeof(mc_ttl))) < 0) {
  158.     perror("setsockopt() failed");
  159.     exit(1);
  160.   }
  161.   */
  162.  
  163.   /* construct a multicast address structure */
  164.   memset(&mc_addr, 0, sizeof(mc_addr));
  165.   mc_addr.sin_family      = AF_INET;
  166.   mc_addr.sin_addr.s_addr = inet_addr(mc_addr_str);
  167.   mc_addr.sin_port        = htons(mc_port);
  168.  
  169.   printf("Begin typing (return to send, ctrl-C to quit):\n");
  170.    bool bOptVal = true;
  171.     int bOptLen = sizeof(bool);
  172.     int iOptLen = sizeof(int);
  173.  
  174.     setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF,
  175.             (char *)&mc_addr, sizeof(mc_addr));
  176.     send_len = strlen(send_str);
  177.  
  178.  
  179.  
  180.     /*   */
  181.     //WaitForSingleObject(thread, INFINITE);
  182.  
  183. while(1){
  184.     /* send string to multicast address */
  185. sendto(sock, send_str, send_len, 0,
  186.          (struct sockaddr *) &mc_addr,
  187.          sizeof(mc_addr)) ;
  188.       printf("POSALJI UNPNP SEARCH");
  189.       getchar();
  190.  
  191.  
  192. }
  193.  
  194.  
  195.  
  196.   closesocket(sock);  
  197.   WSACleanup();  /* Cleanup Winsock */
  198.  
  199.   exit(0);
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement