[unix] netcatの -p オプション

2018年9月3日月曜日

unix

busyboxのnc

のスクリプトは最初 docker の alpine linux で動かしていて、うまく動作しなかったので、どうしたもんかと考えていた。
実は素の alpine linux の nc は busybox で busybox の nc はオプションが違うみたい。

# nc --help
BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.

Usage: nc [OPTIONS] HOST PORT  - connect
nc [OPTIONS] -l -p PORT [HOST] [PORT]  - listen

 -e PROG Run PROG after connect (must be last)
 -l Listen mode, for inbound connects
 -lk With -e, provides persistent server
 -p PORT Local port
 -s ADDR Local address
 -w SEC Timeout for connects and final net reads
 -i SEC Delay interval for lines sent
 -n Don't do DNS resolution
 -u UDP mode
 -v Verbose
 -o FILE Hex dump traffic
 -z Zero-I/O mode (scanning)

https://busybox.net/BusyBox.html#nc

なので

nc -lp 8123 >&${cotest[1]} <&${cotest[0]}

と -p オプションを使って、ポート番号を教えてあげる必要がある。

Docker compose

試してみた環境は以下の通り。

docker-compose.yml
version: "2"
services:
  bash-app:
    build:
      context: .
      dockerfile: Dockerfile-bash
    volumes:
      - ./home:/home
    ports:
      - "8123:8123"
    tty: true

Dockerfile-bash
FROM alpine:latest
RUN apk add --update bash && rm -rf /var/cache/apk/*