SSH 클라이언트가 SSH 포트를 통해 교환된 트래픽을 화면이나 파일에 인쇄하는 SSH 포트 전달을 설정할 수 있습니다.
문제를 디버깅하려고 하는데 로컬 시스템에서 실행 중인 Java 프로세스와 Solaris에서 실행 중인 원격 프로세스 간에 전송되는 내용을 확인하고 싶습니다. Java 프로그램을 실행할 수 있도록 SSH를 통한 포트 전달을 사용하고 있습니다. 일반적으로 .java 파일을 Solaris 시스템에 복사하고 빌드한 후 실행해야 합니다. 이는 디버깅에 매우 효율적인 방법이 아니므로 포트 전달이 필요합니다. 클라이언트와 서버는 IIOP 프로토콜을 사용하므로 http 프록시를 사용하여 트래픽을 모니터링할 수 없습니다.
답변1
나는 속임수를 쓰고 파이프에 netcat
'와 a' 몇 개를 넣을 것입니다.tee
nc -k -l -p $localport -c "tee file.out | nc 127.0.0.1 $portforwardport"
어디에 $localport
Java 프로세스를 가리키는 임의의 포트이고 $portforwardport
ssh 포트 전달 포트 번호입니다. 이로 인해 -k
클라이언트가 종료되는 대신 처음 연결이 끊어진 후에도 청취 netcat이 계속 청취를 유지하게 됩니다. 출력은 결국 file.out
로컬 호스트에 표시됩니다.
답변2
@derobert가 의견에서 말했듯이 최선의 선택은 아마도 Wireshark와 같은 도구를 사용하는 것입니다. SSH 터널에 들어가기 전에 Java 프로세스에서 들어오고 나가는 트래픽을 찾아야 합니다. 터널은 암호화되어 있으므로 접근할 수 없습니다.
또한 sectools.org 웹사이트에는 귀하의 Wireshark가 귀하의 요구 사항에 맞지 않는지 확인할 수 있는 광범위한 스니핑 도구 목록이 있습니다.
답변3
당신은 그것을 사용할 수 있습니다tcpdump
$> sudo tcpdump -vv -x -X -s 1500 -i lo 'port 8000'
이 방법은 SSH 터널을 localhost(인터페이스 lo
)와 포트에 매핑한 경우에 작동합니다.8000
-vv verbose level 2
-X print data in hex and ASCII
-x print data in hex to a max limit of -s
-s snaplen - limit of data to print
-i eth0 tcpdump on the eth0 interface
이 스크립트를 경로에 저장할 수도 있습니다.sniff-port
#!/bin/bash -xe
# use the first argument as port. if not defined default to 8080
PORT=${1:-8080}
# sniff sniff
sudo tcpdump -vv -x -X -s 1500 "port $PORT" -i lo
그런 다음 다음과 같이 사용하십시오.
$> sniff-port 1234
답변4
운명을 이용할 수 있다https://kismetwireless.net/스니핑을 위해.