Nmap Development mailing list archives
Re: ncat unix domain datagram socket receive only mode
From: Daniel Miller <bonsaiviking () gmail com>
Date: Wed, 14 Jan 2015 13:03:11 -0600
Guy, Thanks for the bug report. Unfortunately, things aren't as simple as that: Ncat crashes even without `--recv-only`. The reason is that `logger` does not bind its socket to a filename before sending, meaning that it is an unnamed socket. Ncat just can't handle that right now. I'm going to add a bug for this, since it is a legit problem. Removing the `Connect` call (a wrapper around `connect(2)`) works because the `connect` call is failing due to an empty (null) `sockaddr` being passed as the second argument. This value (`remotess`) is populated farther up with a `recvfrom` call, which works for UDP (which always has a remote address), but not for AF_UNIX SOCK_DGRAM, which can be unnamed (no remote address). We *could possibly* do a more specific check for AF_UNIX and a null `remotess.un.sun_path` in order to skip the `Connect`, but I see 2 potential problems: 1. We later use `send` and `recv` on this socket, which I think need to have a connected socket in order to work properly 2. We use connected UDP for some reason (connection tracking?) that is probably based on a design decision that would need proper discussion and planning to reverse. I'm open to suggestions on how to move forward. Please comment here or on the Github bug report: https://github.com/nmap/nmap/issues/46 Dan On Mon, Dec 15, 2014 at 2:44 PM, Guy Lichtman <guy () guylichtman com> wrote:
Hi,
I am trying to use ncat to listen on a unix domain datagram socket in
receive only mode. I am using this as a simple syslog receiving server for
testing.
When I use the following command:
ncat --recv-only -luU /tmp/test.socket
and then try to log a a message using logger with the following command:
logger -d -u /tmp/test.socket "this is a test"
I get the following error on the ncat side:
connect: Invalid argument
From looking at the ncat_listen.c code it looks like ncat tries to connect
a sending socket even when in recv-only mode. I added a check to connect
only when not in recv-only mode and then ncat worked as expected. Here is a
suggested patch:
svn diff ncat_listen.c
Index: ncat_listen.c
===================================================================
--- ncat_listen.c (revision 33864)
+++ ncat_listen.c (working copy)
@@ -818,7 +818,9 @@
* We're using connected udp. This has the down side of only
* being able to handle one udp client at a time
*/
- Connect(socket_n, &remotess.sockaddr, sslen);
+ /* Connect only if not recvonly */
+ if (!o.recvonly)
+ Connect(socket_n, &remotess.sockaddr, sslen);
/* clean slate for buf */
zmem(buf, sizeof(buf));
Best,
Guy
_______________________________________________
Sent through the dev mailing list
http://nmap.org/mailman/listinfo/dev
Archived at http://seclists.org/nmap-dev/
_______________________________________________ Sent through the dev mailing list http://nmap.org/mailman/listinfo/dev Archived at http://seclists.org/nmap-dev/
Current thread:
- Re: ncat unix domain datagram socket receive only mode Daniel Miller (Jan 14)
- Re: ncat unix domain datagram socket receive only mode Guy Lichtman (Jan 20)
