]> git.saurik.com Git - apple/network_cmds.git/blobdiff - ecnprobe/capture.c
network_cmds-606.40.2.tar.gz
[apple/network_cmds.git] / ecnprobe / capture.c
index 494fc2197c9f3802396d001442529ef526e75225..32a8e0b18e2601f160b284f21bf6fb42af6d8ba3 100644 (file)
@@ -56,7 +56,7 @@
 
 pcap_t *pc;            /* pcap device */
 int datalinkOffset;    /* offset of ip packet from datalink packet */
-int captureDebug = 0;
+int captureDebug = 1;
 unsigned int thisTimeZone;
 
 void CaptureInit(u_int32_t sourceIP, u_int16_t sourcePort,
@@ -82,7 +82,17 @@ void CaptureInit(u_int32_t sourceIP, u_int16_t sourcePort,
   if (dev != NULL) {
     device = dev;
   } else {
-    device = pcap_lookupdev(errbuf);
+    pcap_if_t *devlist;
+    /*
+    * Find the list of interfaces, and pick
+     * the first interface.
+     */
+    if (pcap_findalldevs(&devlist, errbuf) >= 0 &&
+             devlist != NULL) {
+      device = strdup(devlist->name);
+      pcap_freealldevs(devlist);
+    }
+
     if (device == NULL) {
       fprintf(stderr, "Can't find capture device: %s\n", errbuf);
       exit(-1);
@@ -131,13 +141,13 @@ void CaptureInit(u_int32_t sourceIP, u_int16_t sourcePort,
     exit(-1);
   }
 
-  strncpy(source, InetAddress(sourceIP), sizeof(source) - 1);
-  strncpy(target, InetAddress(targetIP), sizeof(target) - 1);
+  strlcpy(source, InetAddress(sourceIP), sizeof(source));
+  strlcpy(target, InetAddress(targetIP), sizeof(target));
 
   /* Setup initial filter */
   sprintf(filtercmds,
-         "host %s and host %s and port %d\n",
-         source, target, targetPort);
+    "(host %s && host %s && port %d) || icmp\n",
+    source, target, targetPort);
 
   if (captureDebug) {
     printf("datalinkOffset = %d\n", datalinkOffset);