意外と知らないWell Known Ports

ちょっとサーバをごにょごにょやってて気付いたんだけど、ポート8080のサービス名はhttp-altだそうだ。Webの開発やってたら8080はよく目にすると思うけど、意外とみんな知らないんじゃないかな。まあ、こんなの知ってても無駄だけどね。

知らなきゃならないのは、/etc/servicesに変換表があるってこと。ぼくは今まで知らなかったんだけど...

なんだか悔しいので、ポート番号とサービス名を正引き/逆引きできるスクリプトを書いてみた。

well-known-port

#!/bin/sh

SERVICES_FILE=/etc/services

usage() {
  echo "usage: $0 [service | port]"
}

services() {
  cat $SERVICES_FILE | sed '/^#/d'
}

main() {
  if [ "$1" = "-h" -o "$1" = "--help" ]
  then
    usage
  elif [ $(($1 - 1)) -lt 0 ]
  then
    # parameter is service name
    services | grep "^$1[[:space:]]"
  else
    # parameter is port number
    services | grep "[[:space:]]$1/"
  fi
}

case $# in
  0) services ; exit 0 ;;
  1) main $@  ; exit 0 ;;
  *) usage    ; exit 1 ;;
esac

SMTPとかSSHとか何番だったかすぐ忘れちゃうんだけど、そんな時はこんな感じで調べられる。

% well-known-port smtp
smtp             25/udp     # Simple Mail Transfer
smtp             25/tcp     # Simple Mail Transfer
% well-known-port ssh
ssh              22/udp     # SSH Remote Login Protocol
ssh              22/tcp     # SSH Remote Login Protocol

ポートからサービス名も逆引きできるからいい感じ。

% well-known-port 8080
http-alt        8080/udp     # HTTP Alternate (see port 80)
http-alt        8080/tcp     # HTTP Alternate (see port 80)

ちなみに、パラメータ無しで呼び出したら一覧を表示するようにした。