파일(cap.pcap)을 생성하는 Python 스크립트가 있습니다. 고양이를 고양이로 잡으면 영원히 붙어있습니다(아무것도 표시되지 않음). 나는 실행하려고 :
- 명령 파일 hd 및 vi. 그들은 잘 작동합니다.
- lsof와 fusioner는 아무것도 표시하지 않습니다.
- cp를 다른 파일로 옮기고 후자를 cat합니다. 붙어 있어요.
- 다른 파일에 dd해도 결과는 동일합니다.
< base64 cap.pcap > b64; < base64 -d b64 > cap2.pcap; cat cap2.pcap;
또 막혔네요.- 테스트를 위해 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
짧은 답변
cat
거의 항상 그의 잘못 이 아니라고 생각할 수 있습니다 . 그렇게 크고 명백한 버그를 갖는 것은 너무 흔하고, 잘 테스트되었으며, 단순합니다.cat
터미널에 바이너리 파일 만 보내지 마십시오 . 터미널은 임의의 바이너리 데이터가 아닌 텍스트를 표시하도록 설계되었습니다.
긴 대답
멈춘 것은 프로세스 자체가 아니라 cat
창을 표시하는 프로그램인 터미널 에뮬레이터입니다. cat
파일 자체의 실제 내용은 신경 쓰지 않고 파일의 모든 내용을 표준 출력 1에 복사하는 것뿐입니다. (이론적으로는) 가능하며 cat /dev/sda
전체 하드 드라이브의 내용을 터미널에 행복하게 덤프할 것입니다.
그러나 터미널 에뮬레이터는 임의의 이진 데이터를 표시하도록 설계되지 않았습니다. 이는 텍스트를 표시하는 데 사용되며 제어 코드라고 하는 인쇄할 수 없는 문자의 특수 시퀀스를 삽입하여 수정할 수 있습니다.탈출 코드, 대부분은 "이스케이프 문자"( \x1B
, 일반적으로 로 표시됨 ^[
)로 시작하기 때문입니다.
이제 바이너리 데이터를 터미널에 덤프하면 이스케이프 문자(또는 그와 관련된 다른 문자)가 표시되어 이스케이프 코드를 해석하려고 시도할 수 있습니다. 즉, 적어도 실제로 유효한 시퀀스를 형성하는지 확인할 수 있을 때까지는 다음 문자가 표시되지 않습니다. 또 다른 가능성은 터미널을 지우거나(아무것도 인쇄되지 않은 것처럼 보이게 만들거나) 전경색을 변경하거나(모든 후속 출력에 아무 것도 인쇄하지 않게 만드는 등의 특수 동작을 트리거하는 유효한 시퀀스가 어딘가에 내장되어 있다는 것입니다. ). 보이는).
테스트 중인 서로 다른 두 컴퓨터에서 서로 다른 터미널 에뮬레이터를 사용하고 있다고 가정합니다. 이는 서로 다른 동작을 설명할 수 있습니다. 일부는 일부 구현에 비공개이므로 모든 TE가 모든 이스케이프 코드를 인식하는 것은 아닙니다. 비표준 시퀀스(예: kitty
래스터 이미지 표시 프로토콜)의 고유한 동작입니다.
cat
1) 주석에 제안된 것과 같이 -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