Nmap Development mailing list archives

ncat udp


From: Marius Sturm <marius.sturm () web de>
Date: Wed, 25 Mar 2009 14:49:17 +0100

Hey list,
I could't find a good reason, why ncat must run in a while loop when
using udp protocol. I would expect, that it behaves almost the same as
in tcp mode. Attached is a patch to go into this direction. Any comments
are welcome!

Best regards,

Marius
diff -urNb nmap/ncat/ncat_exec.c nmap-udp/ncat/ncat_exec.c
--- nmap/ncat/ncat_exec.c       2009-03-25 14:23:09.000000000 +0100
+++ nmap-udp/ncat/ncat_exec.c   2009-03-25 14:31:13.000000000 +0100
@@ -7,6 +7,8 @@
 int netrun(int fd, char *cmdexec)
 {
     int pid;
+    int opt;
+    int opt_len = sizeof(opt);
 
     errno = 0;
     pid = fork();
@@ -18,6 +20,10 @@
     if (pid == -1 && verbose_flag)
         Fprintf(stderr, "DEBUG: error in fork: %s\n", strerror(errno));
 
+    waitpid(pid, NULL, NULL);
+    getsockopt(fd, SOL_SOCKET, SO_TYPE, &opt, &opt_len);
+
+    if (opt != SOCK_DGRAM)
     Close(fd);
 
     return pid;
diff -urNb nmap/ncat/ncat_listen.c nmap-udp/ncat/ncat_listen.c
--- nmap/ncat/ncat_listen.c     2009-03-25 14:23:09.000000000 +0100
+++ nmap-udp/ncat/ncat_listen.c 2009-03-25 14:04:55.000000000 +0100
@@ -341,10 +341,6 @@
     /* clean slate for buf */
     zmem(buf, sizeof(buf));
 
-    /* are we executing a command? then do it */
-    if (o.cmdexec)
-        netexec(sockfd, o.cmdexec);
-
     FD_SET(sockfd, &master);
     FD_SET(STDIN_FILENO, &master);
     fdmax = sockfd;
@@ -375,6 +371,10 @@
                 Write(STDOUT_FILENO, buf, nbytes);
         }
         
+        /* are we executing a command? then do it */
+        if (o.cmdexec && ! o.recvonly)
+          netrun(sockfd, o.cmdexec);
+        
         zmem(buf, sizeof(buf));
     }


_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://SecLists.Org

Current thread: