Bash에서 특정 호스트/포트에 대한 연결이 설정되었는지 테스트하는 방법은 무엇입니까?

Bash에서 특정 호스트/포트에 대한 연결이 설정되었는지 테스트하는 방법은 무엇입니까?

현재 나는 이것을 달성하기 위해 netstat를 사용하고 있습니다.

if netstat -an | grep ESTABLISHED | grep $address:$port > /dev/null; then
    # command
fi  

더 우아한 솔루션이 있습니까?

답변1

우아함 측면에서 귀하의 명령에서 두 가지를 수정하겠습니다.

  • Chris가 의견에서 언급했듯이 -q출력 리디렉션을 대신 사용할 수 있습니다.
  • grep두 개 대신 하나를 사용하십시오 .

    if netstat -an | grep -q " $address:$port .* ESTABLISHED"; then
    

답변2

lsof일을 해야 합니다. options 을 통해 기계가 분석할 수 있는 출력을 제공하도록 요청하세요 -F.

lsof -n -i @${hostname}:${port} -F nT | grep '^TST=ESTABLISHED$'

추가 정보가 필요한 경우:

lsof -n -i -F nT | awk '
    function host_port(s, a) {
        match(s, /:[^:]*$/);
        a["host"] = substr(s, 1, RSTART-1);
        a["port"] = substr(s, RSTART+1);
    }
    sub(/^p/,"") {pid = $0}
    sub(/^n/,"") {
        split($0, endpoints, "->");
        host_port(endpoints[1], from);
        host_port(endpoints[2], to);
    }
    /^TST=ESTABLISHED$/ {
        print "Established from", from["host"] ":" from["port"],
              "to", to["host"] ":" to["port"]
    }
'

답변3

그리고 ss:

if ss -n -o state established '( dport = $hostname:$portnumber )'|awk 'NR==2{exit 0}END{exit 1}';then 

답변4

lsof: 대신 이와 같은 것을 사용할 수 있지만 lsof는 루트에서만 작동하고 일반적으로 기본적으로 설치되지 않으므로 추가적인 외부 종속성입니다.netstatsudo /usr/sbin/lsof -i [email protected]:80

관련 정보