OEM에서 내가 식별할 수 없는 여러 프로세스를 실행하고 있는 데비안 설치가 있는데, 이러한 프로세스 중 전화 접속이 이루어지는지 확인하고 싶습니다.
나는 달렸다sudo tcpdump | grep ^e <ssh_ip>
그러나 파이프는 계속해서 파손되었습니다. SSH를 통해 연결했는데 grep ^e에서 클라이언트의 SSH IP를 생략했습니다. 아웃바운드 요청에 대한 네트워크 연결을 지속적으로 모니터링하는 방법이 있습니까? 나는 이것이 집이라고 부르는 곳이 어디인지, 특히 이 문제와 관련 없는 다른 행동으로부터 그것이 집이라고 의심되는 곳이 어디인지 모릅니다.
깨진 파이프는 일반적으로 연결이 끊어졌음을 의미하지만 내 SSH 연결은 괜찮았습니다. 이는 tcpdump가 수행해야 하는 다른 작업인 것 같습니다.
답변1
존재하다:
sudo tcpdump | grep ^e <ssh_ip>
첫째, ^e
껍질에 따라 의미가 다릅니다.
- Bourne 셸에서 는
^
(원래 이전 Thompson 셸의 파이프 연산자와 유사하게 렌더링됨)에 대한 별칭이므로 파이프를 통해 명령을 실행할 수 있습니다.|
^
↑
grep
e
fish
3.2 이전 버전 에서는^
stderr(의 약자2>
)을 리디렉션하는 데 사용됩니다.- in
rc
과 파생어는^
연결 연산자이므로grep ^e
가 됩니다grepe
. - in 은
zsh -o extendedglob
음수^
전역 연산자이므로^e
이름이 지정된 파일을 제외하고 현재 디렉터리에서 숨겨지지 않은 모든 파일로 확장됩니다e
. csh
/// 에서는 줄의 시작 부분과 기록 확장이 비활성화되지 않은 경우에만 특수 처리됩니다tcsh
.bash
그러니 여기는 아닙니다.zsh
^
- 대부분의 다른 쉘에서는
^e
문자 그대로grep
.
따라서 다음 셸 중 하나를 가정하면 명령은 다른 셸로 파이프된 입력과 동시에 시작되고 출력 sudo tcpdump
됩니다 .grep ^e <ssh_ip>
매개변수의 구문은 ( 선택적 부분을 나타냄) grep
입니다 . 파일이 없으면 표준 입력을 grep하십시오. 옵션은 역할로 시작됩니다.grep [<options>] <regular-expression> [<files>]
[...]
grep
-
이것은 ^e
정규식과 <ssh_ip>
해당 정규식과 일치하는 행을 찾는 데 사용되는 파일입니다.
정규식으로, ^e
다음 줄의 시작 부분과 일치하므로 e
로 시작하는 줄이 보고됩니다 e
.
여기서는 파일이 <ssh_ip>
존재하지 않을 가능성이 높으므로 grep
즉시 오류가 반환됩니다.
이 시점에서 tcpdump
s에서 상속받은 stdout은 sudo
깨진 파이프가 되므로 처음으로 tcpdump
무언가를 출력하려고 하면 SIGPIPE 신호를 받고 죽거나, 신호를 무시하면 write()
오류와 함께 실패 하게 됩니다 EPIPE
. 여기서 tcpdump는 신호를 무시하고 실패를 보고하거나 write()
처리기가 있고 종료하기 전에 수신을 보고함을 나타내는 오류 메시지를 작성합니다.
의 출력에서 IP 주소가 포함된 행을 필터링하려면 where 와 here를 하나의 매개변수로 묶어서 표현 tcpdump
해야 합니다.grep -Fvw <ssh_ip>
-F
-v
-w
F
정규식 대신 고정 문자열과 일치합니다 ( 정규식에서와 같이 단일 문자가 아닌.
리터럴과 일치하는 데 사용됨)..
- Rematch
v
: 일치하는 행을 반환합니다.아니요성냥. - 주문만 일치합니다(예: ==는 해당 항목에서
w
찾을 수 없습니다<ssh_ip>
).10.10.10.10
210.10.10.109
기본적으로 tcpdump는 출력이 터미널로 전송되지 않는 것을 감지하면 블록 버퍼링으로 되돌아가므로 출력이 나오는 즉시 확인하려면 -l
tcpdump에 옵션을 추가하여 다시 활성화 해야 할 수도 있습니다.철사완충기.
그러나 어쨌든 tcpdump는 자체적으로 패킷을 필터링할 수 있습니다. 여기에서 특정 IP 주소와의 패킷을 제외하려면 다음을 수행하면 됩니다.
sudo tcpdump not host <ssh_ip>
또는 해당 IP 주소의 SSH 트래픽만 필터링합니다.
sudo tcpdump 'not (host <ssh_ip> and tcp port ssh)'
(Ssh 연결이 기본 포트 22에 있다고 가정합니다.)
이러한 필터(Berkeley Packet Filters, BPF)는 커널( setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, filter)
적어도 Linux에서는)에 전달되는 바이너리 필터 표현식으로 컴파일됩니다. 필터링은 여기에서 수행되므로 실제로 tcpdump가 모든 트래픽을 요청하고 이를 모두 디코딩하여 grep에 전달하는 것보다 tcpdump 및 시스템에 대한 작업이 더 적습니다.
wireshark
, 해당 명령줄 인터페이스는 tshark
여기에서도 고려할 수 있는 고급 트래픽 분석 애플리케이션입니다. 두 가지 유형의 필터를 지원합니다. 위에서 BPF라고 불리는 필터입니다.캡처 필터(통과 -f
) 및필터 표시(통과 -Y
) Wireshark의 자체 필터 구문과 고급 기능을 사용하여 커널에서 반환된 패킷에 추가로 적용됩니다.
또는 현재 작업 디렉토리로 재귀적으로 이동합니다( 최신 버전의 GNU 구현에 -r
/ 옵션이 제공된 경우).-R
grep