Sending UDP packets from the command line

Although is pretty easy to write a perl/python script to send UDP data, I wanted to be able to send a UDP message from the command line to test some code quickly. After 15 seconds of googling I found the awesome command “sendip”. After a minute of reading the man page I got what I needed:

sendip -p ipv4 -is 192.168.1.81 -p udp -us 5070 -ud 5060 -d "Hello" -v 192.168.1.81

This should send a “Hello” message over udp to port 5060 using an ipv4 address.

Here the result:

Added 26 options
Initializing module ipv4
Initializing module udp
Finalizing module udp
Finalizing module ipv4
Final packet data:
45 00 00 21   E..!
34 E0 00 00   4...
FF 11 02 F9   ....
C0 A8 01 51   ...Q
C0 A8 01 51   ...Q
13 CE 13 C4   ....
00 0D 30 7D   ..0}
48 65 6C 6C   Hell
6F   o
Sent 33 bytes to 192.168.1.81
Freeing module ipv4
Freeing module udp

It is pretty awesome that you can build about any protocol packet for quick testing using just bash …

This entry was posted in linux. Bookmark the permalink.

20 Responses to Sending UDP packets from the command line

  1. honest man says:

    This does not work for windows.

  2. Pingback: Need to fake some incoming packets? | solutions not code

  3. chetan H.P says:

    I tried sending sendip from my machine in terminal, but I am unable get any response. Do I need to add any extra tool for it

  4. Ananth says:

    do I need to install sendIp software to use this unix command to set packets?

  5. Chris says:

    you can also use the ubiquitous net cat
    echo -n “foo” | nc -4u -w1
    http://mikeberggren.com/post/53883822425/ncudp

  6. Zied says:

    Thanks for this topic. found exactly what I want to troubleshot rsyslog remote udp message logging

  7. Tim says:

    If you want an easy to way to send/receive TCP/UDP packets, you can just download this: http://packetsender.com/

  8. RR says:

    Is “SendIP” a third part tool or comes as port of windows?

  9. Rain says:

    how to send to a ports range ?

  10. Moy says:

    It is definitely another option and looks easier. However, it is probably not as powerful.

    * Can you specify IPv6 somehow? perhaps implicit when using IPv6 address formatting?

    * How do you specify the source IP address and port?

    Another difference is that if you’re using dash (Ubuntu now ships with it I believe), zsh, korn shell or others, that might not work.

  11. Peter says:

    Is it easier to use bash’s built in TCP/UDP handling capabilities?

    echo “hello” > /dev/tcp/192.168.2.101/58549
    echo “hello” > /dev/udp/192.168.2.101/58549

  12. Moy says:

    Yes you can do that.

    Don’t do evil stuff!

  13. Vice says:

    can u send that to a public ip like google server or something like that?

  14. Moy says:

    Hey Vlad!

    That’s a creative use of socat.

    I had only used it in the past to quickly send freeswitch ESL commands over TCP from bash, I should’ve thought udp support was there as well.

    Thanks for sharing!

  15. Vlad says:

    Hi Moy,

    I like socat:
    e.g.:
    echo “HELLO” | socat – UDP-DATAGRAM:192.168.0.255:5000,broadcast

    Checkout some examples:
    http://thekissinglink.blogspot.com/2010/01/socat-examples.html

  16. Moy says:

    Hi José,

    Never used sipsak, whenever I need full SIP testing I use “sipp”. I see sipsak handy though for quick testing without bothering to write an XML scenario for sipp. Thanks for sharing!

  17. Jose Ferney Franco says:

    Have you tried “sipsak” for SIP testing?

  18. M00kaw says:

    This is really indeed awesome!
    I was looking at some ruby / perl code for creating such a tool…
    I still think I’m going to play with it – but this is just so awesome..
    Linux just keeps surprising me..

    Thanks a lot for sharing!

  19. mis_suscripciones says:

    Gracias por compartir, acabo de publicar tu enlace en Reddit: http://redd.it/qyh7d

Leave a Reply

Your email address will not be published. Required fields are marked *

*