Package: netcat
Version: 1.10-33

Netcat hangs when it acts as UDP server and receives the input on a
shell script and tries to process it.

This is the simplest bash script to test it:

$ cat test.sh
#! /bin/bash
read v
echo $v


Using netcat:

Server: nc -u -l -p 9999 -e /home/user/test.sh

Client: printf "%b" "something\n" | nc -u localhost 9999

Log: sudo /usr/sbin/tcpdump -s 0 -xX udp -i lo
16:45:07.704270 IP localhost.32808 > localhost.9999: UDP, length 10
      0x0000:  4500 0026 2889 4000 4011 143c 7f00 0001  E..&([EMAIL 
PROTECTED]@..<....
      0x0010:  7f00 0001 8028 270f 0012 fe25 736f 6d65  .....('....%some
      0x0020:  7468 696e 670a                           thing.

As you can see, there is no response from server.



However, we get the expected result trying the same test with netcat6,
version 1.0-1.

Server: nc6 -u -l -p 9999 -e /home/user/test.sh

Client: printf "%b" "something\n" | nc6 -u localhost 9999

Log: sudo /usr/sbin/tcpdump -s 0 -xX udp -i lo
16:45:29.576650 IP localhost.32808 > localhost.9999: UDP, length 10
      0x0000:  4500 0026 3de5 4000 4011 fedf 7f00 0001  E..&[EMAIL 
PROTECTED]@.......
      0x0010:  7f00 0001 8028 270f 0012 fe25 736f 6d65  .....('....%some
      0x0020:  7468 696e 670a                           thing.
16:45:29.580246 IP localhost.9999 > localhost.32808: UDP, length 10
      0x0000:  4500 0026 3de5 4000 4011 fedf 7f00 0001  E..&[EMAIL 
PROTECTED]@.......
      0x0010:  7f00 0001 270f 8028 0012 fe25 736f 6d65  ....'..(...%some
0x0020: 7468 696e 670a



This is the summarized strace of the netcat server that is hanging:

$ strace nc -u -l -p 9999 -e /home/user/test.sh

...

bind(3, {sa_family=AF_INET, sin_port=htons(9999), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
rt_sigaction(SIGALRM, {SIG_IGN}, {SIG_DFL}, 8) = 0
alarm(0)                                = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
recvfrom(3,
"something\n", 8192, MSG_PEEK, {sa_family=AF_INET, sin_port=htons(32810), sin_addr=inet_addr("127.0.0.1")}, [16]) = 10
rt_sigaction(SIGALRM, {SIG_IGN}, {SIG_IGN}, 8) = 0
alarm(0)                                = 0
connect(3, {sa_family=AF_INET, sin_port=htons(32810), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 getsockname(3, {sa_family=AF_INET, sin_port=htons(9999), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
dup2(3, 0)                              = 0

...

ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbff0c948) = -1 EINVAL (Invalid argument)
_llseek(0, 0, 0xbff0c9b0, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
read(0, "s", 1)                         = 1
read(0,

As you can see, it reads first 's' char from string "something" and remains
blocked forever.


--
Ivan Castell Rovira
-------------------------------------------------------------------
CIRCONTROL, S.A.
Lepanto, 43
08223 - Terrassa
SPAIN
Tel. +34 937362940
Fax. +34 937362941
E.mail: [EMAIL PROTECTED]
WEB: www.circontrol.com
-------------------------------------------------------------------




--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to