How to make an Echo server with Bash?

后端 未结 5 1438
伪装坚强ぢ
伪装坚强ぢ 2020-12-12 20:58

How to write a echo server bash script using tools like nc, echo, xargs, etc capable of simultaneously processing requests from multiple clients each with durable connection

相关标签:
5条回答
  • 2020-12-12 21:15

    netcat solution pre-installed in Ubunutu

    The netcat pre-installed in Ubuntu 16.04 comes from netcat-openbsd, and has no -c option, but the manual gives a solution:

    sudo mknod -m 777 fifo p
    cat fifo | netcat -l -k localhost 8000 > fifo
    

    Then client example:

    echo abc | netcat localhost 8000
    

    TODO: how to modify the input string value? The following does not return any reply:

    cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
    

    The remote shell example however works:

    cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
    

    I don't know how to deal with concurrent requests simply however.

    0 讨论(0)
  • 2020-12-12 21:21

    what about...

    #! /bin/sh
    
    while :; do
    /bin/nc.traditional -k -l -p 3342 -c 'xargs -n1 echo'
    done
    
    0 讨论(0)
  • 2020-12-12 21:28

    If you use ncat instead of nc your command line works fine with multiple connections but (as you pointed out) without -p.

    ncat -l 2000 -k -c 'xargs -n1 echo'
    

    ncat is available at http://nmap.org/ncat/.

    P.S. with the original the Hobbit's netcat (nc) the -c flag is not supported.

    Update: -k (--keep-open) is now required to handle multiple connections.

    0 讨论(0)
  • 2020-12-12 21:31

    Here are some examples. ncat simple services

    TCP echo server

    ncat -l 2000 --keep-open --exec "/bin/cat"
    

    UDP echo server

    ncat -l 2000 --keep-open --udp --exec "/bin/cat"
    
    0 讨论(0)
  • 2020-12-12 21:38

    In case ncat is not an option, socat will also work:

    socat TCP4-LISTEN:2000,fork EXEC:cat
    

    The fork is necessary so multiple connections can be accepted. Adding reuseaddr to TCP4-LISTEN may be convenient.

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