How to send only one UDP packet with netcat?

后端 未结 5 1841
挽巷
挽巷 2021-01-29 19:20

I want to send only one short value in a UDP packet, but running the command

echo -n \"hello\" | nc -4u localhost 8000

I can see that the serve

相关标签:
5条回答
  • 2021-01-29 19:52

    If you are using bash, you might as well write

    echo -n "hello" >/dev/udp/localhost/8000
    

    and avoid all the idiosyncrasies and incompatibilities of netcat.

    This also works sending to other hosts, ex:

    echo -n "hello" >/dev/udp/remotehost/8000
    

    These are not "real" devices on the file system, but bash "special" aliases. There is additional information in the Bash Manual.

    0 讨论(0)
  • 2021-01-29 19:53

    I did not find the -q1 option on my netcat. Instead I used the -w1 option. Below is the bash script I did to send an udp packet to any host and port:

    #!/bin/bash
    
    def_host=localhost
    def_port=43211
    
    HOST=${2:-$def_host}
    PORT=${3:-$def_port}
    
    echo -n "$1" | nc -4u -w1 $HOST $PORT
    
    0 讨论(0)
  • 2021-01-29 19:54

    I had the same problem but I use -w 0 option to send only one packet and quit. You should use this command :

    echo -n "hello" | nc -4u -w0 localhost 8000
    
    0 讨论(0)
  • 2021-01-29 20:13

    Netcat sends one packet per newline. So you're fine. If you do anything more complex then you might need something else.

    I was fooling around with Wireshark when I realized this. Don't know if it helps.

    0 讨论(0)
  • 2021-01-29 20:16

    On a current netcat (v0.7.1) you have a -c switch:

    -c, --close                close connection on EOF from stdin
    

    Hence,

    echo "hi" | nc -cu localhost 8000
    

    should do the trick.

    0 讨论(0)
提交回复
热议问题