내 서버에 대한 역방향 SSH 연결을 생성하여 원격으로 SSH를 통해 관리할 수 있는 원격 장치가 여러 개 있습니다. 그들은 맞춤형 포트를 통해 나에게 다시 연결됩니다. 서버에서 작업을 수행 하면 netstat -an | grep 127.0.0.0.1:
현재 연결된 장치 목록이 표시됩니다. 출력은 다음과 같습니다.
tcp 0 0 127.0.0.1:6001 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6002 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6003 0.0.0.0:* LISTEN
여기서 600x는 장치가 연결된 포트입니다. 내 문제는 이것이다. 현재 연결된 장치를 표시하는 서버에서 실행할 수 있는 스크립트를 만들고 싶습니다. 내 스크립트가 읽을 수 있고 다음과 같이 내 장치를 나열하는 구성 파일을 원합니다.
NORTH:6001
SOUTH:6002
EAST:6003
WEST:6004
스크립트는 명령의 출력을 구문 분석 netstat
하고 출력은 다음과 같습니다.
유효한 연결: 북쪽, 남쪽, 동쪽
비활성 연결: WEST
너무 혼란스럽지 않기를 바랍니다. grep이나 awk로 할 수 있는 일인가요?
답변1
다음은 세 단계입니다.
netstat에서 활성 포트 이름을 추출하세요.
netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}'
awk
공백과 콜론 집합을 구분 기호로 지정 하고 포트 ID만 선택합니다.
device_list.txt
grep과 1단계의 명령 출력을 패턴으로 사용하여 장치 목록 파일(예: 명명된)에서 이러한 포트를 비교합니다.netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}' | grep -f - device_list.txt
이것은 다음과 같은 출력을 제공합니다
NORTH:6001
SOUTH:6002
EAST:6003
-v
grep a를 사용하여 비활성 연결을 얻을 수 있습니다netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}' | grep -v -f - device_list.txt
이것의 출력은 다음과 같습니다
WEST:6004
그런 다음 위의 내용을 중심으로 스크립트를 작성하여 원하는 형식으로 인쇄할 수 있습니다.