title: Unable to capture IP Broadcast packets using tcpdump
body: <p>I was using a sample udp client program to send an IP broadcast packet, and tried to capture the same using tcpdump and used the following sample commands</p>
  
  <p>sudo tcpdump -n src port 1050
  sudo tcpdump -i em1 "port 1050"</p>
  
  <p>Here is the output of ip route (with modified IP addresses)</p>
  
  <pre><code>default via x.x.x.x dev em1  proto static
  x.46.78.0/23 dev em1  proto kernel  scope link  src x.y.79.16  metric 1
  x.y.0.0/16 dev p4p1.1102  proto kernel  scope link  src x.y.7.45  metric 6
  x.y.0.0/16 dev p4p1.1103  proto kernel  scope link  src x.y.7.45  metric 6
  x.y.0.0/24 dev p4p1.1100  proto kernel  scope link  src x.y.0.1  metric 6
  x.y.1.0/24 dev prvn-bridge  proto kernel  scope link  src x.y.1.10  metric 20
  x.y.122.0/24 dev virbr0  proto kernel  scope link  src x.y.122.1
  x.0.0.0/4 dev p4p1.1102  proto static
  x.0.0.0/4 dev p4p1.1103  proto static
  
  //Client code used for sending IP Broadcast packet (modified version of http://www.csee.usf.edu/~christen/tools/udpClient.c)
  
  #define  BSD                // WIN for Winsock and BSD for BSD sockets
  
  //----- Include files ---------------------------------------------------------
  #include &lt;stdio.h&gt;          // Needed for printf()
  #include &lt;string.h&gt;         // Needed for memcpy() and strcpy()
  #ifdef WIN
    #include &lt;windows.h&gt;      // Needed for all Winsock stuff
  #endif
  #ifdef BSD
    #include &lt;sys/types.h&gt;    // Needed for sockets stuff
    #include &lt;netinet/in.h&gt;   // Needed for sockets stuff
    #include &lt;sys/socket.h&gt;   // Needed for sockets stuff
    #include &lt;arpa/inet.h&gt;    // Needed for sockets stuff
    #include &lt;fcntl.h&gt;        // Needed for sockets stuff
    #include &lt;netdb.h&gt;        // Needed for sockets stuff
  #endif
  
  //----- Defines ---------------------------------------------------------------
  #define  PORT_NUM           1050  // Port number used
  
  //===== Main program ==========================================================
  void main(void)
  {
  #ifdef WIN
    WORD wVersionRequested = MAKEWORD(1,1);       // Stuff for WSA functions
    WSADATA wsaData;                              // Stuff for WSA functions
  #endif
    int                  client_s;        // Client socket descriptor
    struct sockaddr_in   server_addr;     // Server Internet address
    int                  addr_len;        // Internet address length
    char                 out_buf[4096];   // Output buffer for data
    char                 in_buf[4096];    // Input buffer for data
    int                  retcode;         // Return code
    int                  iOptVal;         // Socket option value
    int                  iOptLen;         // Socket option length
    int                  count;
  
  #ifdef WIN
    // This stuff initializes winsock
    WSAStartup(wVersionRequested, &amp;wsaData);
  #endif
  
    // Create a socket
    client_s = socket(AF_INET, SOCK_DGRAM, 0);
    if (client_s &lt; 0)
    {
      printf("*** ERROR - socket() failed \n");
      exit(-1);
    }
  
    // Fill-in server socket's address information
    server_addr.sin_family = AF_INET;                 // Address family to use
    server_addr.sin_port = htons(PORT_NUM);           // Port num to use
    server_addr.sin_addr.s_addr = (INADDR_ANY); // Need this for Broadcast
  
    // Set socket to use MAC-level broadcast
    iOptVal = 1;
    iOptLen = sizeof(int);
    setsockopt(client_s, SOL_SOCKET, SO_BROADCAST, (char*)&amp;iOptVal, iOptLen);
  
    // Assign a message to buffer out_buf
    strcpy(out_buf, "Test message from CLIENT to SERVER");
  
    // Now send the message to server.
    for (count = 0 ; count &lt; 100; count++)
    {
    printf("Sending a broadcast packet\n");
    retcode = sendto(client_s, out_buf, (strlen(out_buf) + 1), 0,
      (struct sockaddr *)&amp;server_addr, sizeof(server_addr));
    if (retcode &lt; 0)
    {
      printf("*** ERROR - sendto() failed \n");
      exit(-1);
    }
    sleep(5);
    }
  
  #if 0
    // Wait to receive a message
    addr_len = sizeof(server_addr);
    retcode = recvfrom(client_s, in_buf, sizeof(in_buf), 0,
      (struct sockaddr *)&amp;server_addr, &amp;addr_len);
    if (retcode &lt; 0)
    {
      printf("*** ERROR - recvfrom() failed \n");
      exit(-1);
    }
  #endif
    // Output the received message
    printf("Received from server: %s \n", in_buf);
  
    // Close all open sockets
  #ifdef WIN
    retcode = closesocket(client_s);
    if (retcode &lt; 0)
    {
      printf("*** ERROR - closesocket() failed \n");
      exit(-1);
    }
  #endif
  #ifdef BSD
    retcode = close(client_s);
    if (retcode &lt; 0)
    {
      printf("*** ERROR - close() failed \n");
      exit(-1);
    }
  #endif
  
  #ifdef WIN
    // This stuff cleans-up winsock
    WSACleanup();
  #endif
  }
  </code></pre>
  
  <p>But for some reason, I couldn't see the packets. Can someone please help me with this.</p>
  
  <p>Thanks.</p>