tcpdump, tee 및 scp 실행

tcpdump, tee 및 scp 실행

다음 명령을 실행하려고 합니다.

$ tcpdump -l -X -i eth1 -n tcp port <port> | tee capture.txt | \
       scp capture.txt  [email protected]:/home/checker/
  1. tcpdump -l -X -i eth1 -n tcp port <port>

    1단계에서는 "-l"을 사용하여 표준 출력 라인을 버퍼링하여 패킷이 도착할 때 각 패킷에 쓸 수 있도록 패킷을 캡처합니다.

  2. tee capture.txt

    2단계 man tee: "티 유틸리티는 표준 입력을 표준 출력으로 복사하여 0개 이상의 파일에 복사본을 만듭니다."

  3. scp capture.txt root@<remote-IP>:/home/

    3단계에서는 Capture.txt 파일을 원격 호스트로 보냅니다.

질문

1단계와 2단계만 수행하면 모든 패킷이 지정된 포트에서 캡처됩니다. 그러나 3단계도 사용하면 capture.txt에 모든 패킷이 포함되지 않습니다(몇 개만). 몇 분 전에는 정상적으로 실행되었기 때문에 실망스럽습니다!

여기에 문제가 있나요?

답변1

tee명령은 데이터가 수신되면 출력 파일에 데이터를 쓰지만 scp파일은 즉시 한 번만 복사됩니다. 파이프라인의 모든 명령은 동시에(또는 거의 동시에) 실행되므로 출력되는 패킷의 수가 적거나 전혀 없습니다.캡처.txt파일이 복사되기 전의 파일입니다 scp.

원하는 것을 수행하는 방법에는 여러 가지가 있습니다.

원격 호스트에서 일부 패킷을 복사한 tcpdump다음 완료되면 파일을 원격 호스트로 전송하려는 경우 이 옵션을 사용하여 해당 수의 패킷을 캡처한 후 종료할 수 있습니다 -c. 및 명령이 완료된 후에 실행되도록 세미콜론을 사용하여 tcpdump명령을 파이프에서 분리합니다.scptcpdumptee

tcpdump -l -c 10  | tee  /tmp/capture.txt; scp /tmp/capture.txt root@remotehost:/tmp

또는 패킷을 실시간으로 보고 실시간으로 복사하려면 다음 명령에서 tee패킷을 /dev/tty에 출력하여 패킷을 확인한 다음 파이프하여 ssh원격 호스트의 파일에 쓸 수 있습니다.

tcpdump -l   | tee /dev/tty | ssh root@remotehost "cat > /tmp/capture.txt"

-c여기에 옵션이 없으면 tcpdump는 사용자가 종료할 때까지 실행됩니다.

로컬 및 원격 Capture.txt 파일에 패킷을 저장하려면 다음 tee명령을 사용할 수 있습니다.

tcpdump -l   | tee /tmp/capture.txt | tee /dev/tty | ssh root@remotehost "cat > /tmp/capture.txt"

답변2

scp가 Capture.txt를 읽을 때 tee가 쓰기를 완료했다는 보장은 없습니다. 당신이 할 수 있는 일은 tee의 stdout을 사용하고 다음과 같이 ssh를 통해 파이프하는 것입니다:

tcpdump -l -X -i eth1 -n tcp port <port> | tee capture.txt | \
  ssh [email protected] 'cat > /home/checker/capture.txt'

답변3

여기서 문제는 복사 중인 파일이 scp연속이 아닌 특정 순간에 복사되므로 결국 서버 10.3.3.227에 파일 내용의 조각이 남는다는 것입니다.

이 시도:

$ sudo tcpdump -l -X -i eth1 -n <tcp port> | tee capture.txt | \
    ssh [email protected] 'cat > /home/checker/capture.txt

관련 정보