I want to send a PING
to Redis to check if the connection is working, now I could just install redis-cli
, but I don’t want to and curl
is already there. So how can I abuse curl
to do that? Basically I need to turn off what’s send here:
> GET / HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: localhost:6379 > Accept: */* > -ERR wrong number of arguments for 'get' command -ERR unknown command 'User-Agent:' -ERR unknown command 'Host:' -ERR unknown command 'Accept:'
I was able to get rid of the User-Agent
altogether by adding -A ""
, but I can’t find anything else for the rest. Any idea how I can do that?
Advertisement
Answer
When you want to use curl, you need REST over RESP, like webdis, tinywebdis or turbowebdis. See https://github.com/markuman/tinywebdis#turbowebdis-tinywebdis–cherrywebdis
$ curl -w 'n' http://127.0.0.1:8888/ping {"ping":"PONG"}
Without a REST interface for redis, you can use netcat for example.
$ (printf "PINGrn";) | nc <redis-host> 6379 +PONG
For password protected redis you can use netcat like this:
$ (printf "AUTH <password>rn";) | nc <redis-host> 6379 +PONG
With netcat you have to build the RESP protocol by your self. See http://redis.io/topics/protocol
update 2018-01-09
I’ve build a powerfull bash function which pings the redis instance at any cost over tcp
function redis-ping() { # ping a redis server at any cost redis-cli -h $1 ping 2>/dev/null || echo $((printf "PINGrn";) | nc $1 6379 2>/dev/null || exec 3<>/dev/tcp/$1/6379 && echo -e "PINGrn" >&3 && head -c 7 <&3) }
usage redis-ping localhost