짧은 답변

짧은 답변

파일(cap.pcap)을 생성하는 Python 스크립트가 있습니다. 고양이를 고양이로 잡으면 영원히 붙어있습니다(아무것도 표시되지 않음). 나는 실행하려고 :

  1. 명령 파일 hd 및 vi. 그들은 잘 작동합니다.
  2. lsof와 fusioner는 아무것도 표시하지 않습니다.
  3. cp를 다른 파일로 옮기고 후자를 cat합니다. 붙어 있어요.
  4. 다른 파일에 dd해도 결과는 동일합니다.
  5. < base64 cap.pcap > b64; < base64 -d b64 > cap2.pcap; cat cap2.pcap;또 막혔네요.
  6. 테스트를 위해 base64 콘텐츠를 다른 컴퓨터로 보내면 정상적으로 작동합니다.

또한 다른 파일에 대해 cat을 실행하면 작동합니다.

버전:

  • 우분투 18.04.1
  • Cat(GNU coreutils) 8.28

도움이 될 수 있는 경우를 대비해 Python 스크립트의 다음 부분이 이를 담당합니다.

import pcapy
data = []

cap = pcapy.open_live("enp0s3" , 65536 , 1 , 0)
dumper = cap.dump_open('cap.pcap')
for i in range(20):
    hdr, pkt = cap.next()
    dumper.dump(hdr, pkt)
    if i%10 == 9:
        f = open('cap.pcap', 'rb+')
        data += f.read();
        f.truncate(0)
        f.close()
dumper.close()

답변1

짧은 답변

  1. cat거의 항상 그의 잘못 이 아니라고 생각할 수 있습니다 . 그렇게 크고 명백한 버그를 갖는 것은 너무 흔하고, 잘 테스트되었으며, 단순합니다.
  2. cat터미널에 바이너리 파일 만 보내지 마십시오 . 터미널은 임의의 바이너리 데이터가 아닌 텍스트를 표시하도록 설계되었습니다.

긴 대답

멈춘 것은 프로세스 자체가 아니라 cat창을 표시하는 프로그램인 터미널 에뮬레이터입니다. cat파일 자체의 실제 내용은 신경 쓰지 않고 파일의 모든 내용을 표준 출력 1에 복사하는 것뿐입니다. (이론적으로는) 가능하며 cat /dev/sda전체 하드 드라이브의 내용을 터미널에 행복하게 덤프할 것입니다.

그러나 터미널 에뮬레이터는 임의의 이진 데이터를 표시하도록 설계되지 않았습니다. 이는 텍스트를 표시하는 데 사용되며 제어 코드라고 하는 인쇄할 수 없는 문자의 특수 시퀀스를 삽입하여 수정할 수 있습니다.탈출 코드, 대부분은 "이스케이프 문자"( \x1B, 일반적으로 로 표시됨 ^[)로 시작하기 때문입니다.

이제 바이너리 데이터를 터미널에 덤프하면 이스케이프 문자(또는 그와 관련된 다른 문자)가 표시되어 이스케이프 코드를 해석하려고 시도할 수 있습니다. 즉, 적어도 실제로 유효한 시퀀스를 형성하는지 확인할 수 있을 때까지는 다음 문자가 표시되지 않습니다. 또 다른 가능성은 터미널을 지우거나(아무것도 인쇄되지 않은 것처럼 보이게 만들거나) 전경색을 변경하거나(모든 후속 출력에 아무 것도 인쇄하지 않게 만드는 등의 특수 동작을 트리거하는 유효한 시퀀스가 ​​어딘가에 내장되어 있다는 것입니다. ). 보이는).

테스트 중인 서로 다른 두 컴퓨터에서 서로 다른 터미널 에뮬레이터를 사용하고 있다고 가정합니다. 이는 서로 다른 동작을 설명할 수 있습니다. 일부는 일부 구현에 비공개이므로 모든 TE가 모든 이스케이프 코드를 인식하는 것은 아닙니다. 비표준 시퀀스(예: kitty래스터 이미지 표시 프로토콜)의 고유한 동작입니다.

cat1) 주석에 제안된 것과 같이 -t파일을 출력하기 전에 파일 내용에 대해 작업을 수행할 수 있는 몇 가지 플래그가 있습니다 . 자세한 내용은 을 참조하세요 man cat.

당신은 무엇을 할 수 있나요

때로는 파일의 실제 바이트를 확인하고 싶을 수도 있고 필요할 수도 있습니다. 이러한 경우에는 터미널에서 안전하게 인쇄할 수 있도록 파일의 각 바이트를 16진수로 표시하는 16진수 편집기라는 특수 소프트웨어를 사용해야 합니다.

간단한 보기 목적으로 이 프로그램을 사용할 수도 있습니다. 이 프로그램은 배포판에 따라 xxd포함되거나 독립형일 수 있습니다 .vim

대부분의 배포판에 포함된 것을 사용하여 strings바이너리 파일에 존재할 수 있는 모든 종류의 텍스트를 추출할 수 있습니다. binutils(지적해 주신 @Rui F Ribeiro에게 감사드립니다)

답변2

pcap 파일은 libpcap 라이브러리에 의해 생성됩니다. 텍스트 파일이 아닙니다. 네트워크 트래픽을 덤프하는 특별한 원시 형식의 파일입니다.

tcpdump 명령은 이 형식을 이해합니다.

TCP/IP 트래픽의 헤더를 보려면:

tcpdump -r cap.pcap -n

캡처된 트래픽을 보려면:

tcpdump -r cap.pcap -n -s 1500 -X

관련 정보