다른 프로그램이 루트 (수퍼 유저) 권한없이 traceroute 기능을 제공하는 것을 보았습니까? 나는 항상 원시 소켓이 루트가되어야한다고 가정했지만 다른 방법이 있습니까? (누군가가 "supertrace"또는 "tracepath"에 대해 언급 한 것 같습니까?) 감사합니다!루트 권한이 필요없는 traceroute 형 프로그램을 어떻게 실행할 수 있습니까?
답변
목표를 핑 (ping)하고 점차 TTL을 높이고 "TTL 초과"응답의 출처를 관찰합니다.
일부 응용 프로그램에서는 원시 소켓을 사용하는 대신 더 높은 번호의 tcp 또는 udp 포트 번호를 사용합니다. tcp 포트를 알려진 웹 서버의 포트 80에 연결하면 해당 서버로 traceroute 할 수 있습니다. 단점은 대상 장치에서 열어 놓은 포트를 확인하는 것이 필요하다는 것입니다.
나는 root를 필요로하지 않고 이것을 한 단일 도구를 찾으려고 노력했다. 나는 할 수 없었다. google.com과 같이 traceroute 할 수있는 루트가 필요없는 예가 있습니까? –
ICMP 패킷을 보내고 받기 위해 원시 소켓을 사용할 필요가 없습니다. 적어도 Windows에서는 그렇지 않습니다.
사용자 정의 TTL이있는 패킷은 어떻게됩니까? – brian
99.99 % 잘못되었습니다. ICMP 메시지를 위조하고 보내려면 원시 소켓이 필요하지만 기본적으로 비활성화 된 일부 Linux 시스템에서는 100 % 잘못하지 않는 ICMP 에코 요청 메시지에 대한 예외가 있습니다. –
@ jean-loup - 저는 수년 전에 ICMP를 내부적으로 구현하여 서버를 감시하는 네트워크 모니터링 시스템에 대한 저의 의견을 기반으로했습니다. 원시 소켓을 사용하지 않았습니다. 이것은 거의 10 년 전이었을 것입니다. 그래서 상황이 바뀔 수도 있습니다. 또한 모든 Windows 버전이 실제로 원시 소켓을 지원하지는 않습니다.나는 마이크로 소프트가 실제로 그것을 가능하게했을 때 기억이 나지 않지만, 보안 상 걱정 때문에 XP SP2에서 해제했다. 그때 이후로 나는 그들이 무엇을했는지 모른다. – Ferruccio
현대 리눅스 배포판을 사용하고 있다면 traceroute (또는 traceroute가 setuid가 나오기 전에 나온 tracepath)와 tcptraceroute를 볼 수 있습니다. 이들 중 누구도 RAW 소켓을 필요로하지 않습니다. Fedora 9에서 확인했는데, setuid가 아니며 일반 사용자의 기본 옵션으로 작업합니다.
tcptraceroute가 사용하는 코드는 esp 일 수 있습니다. 예를 들어, 주소에 대한 ICMP 패킷이 반드시 포트 80에 대한 TCP 연결과 동일한 위치에서 끝나는 것은 아닙니다.
int opt_on = 1;
int opt_off = 0;
fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)
setsockopt(fd, SOL_IP, IP_MTU_DISCOVER, &opt_off, sizeof int)
setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &opt_on, sizeof int)
setsockopt(fd, SOL_IP, IP_RECVTTL, &opt_on, sizeof int)
... 다음는 cmsg 결과에서 데이터를 읽어 :
(일반 사용자로) 경로 추적의 strace를 지내요은 같은 일을 보여줍니다.
traceroute.c의 소스 코드는 패킷의 TTL을 다시 쓰기 위해 사용자가 루트가 될 것으로 기대합니다. 배포판을 보면 traceroute이 setuid 루트 일 가능성이 큽니다. – brian
핑 및 traceroute은 ICMP 프로토콜을 사용합니다. UDP와 TCP와 마찬가지로 이것은 일반 소켓 API를 통해 액세스 할 수 있습니다. 1024 이하의 UDP 및 TCP 포트 번호 만 루트가 아닌 사용으로부터 보호됩니다. ICMP는 모든 사용자가 자유롭게 사용할 수 있습니다.
ping 및 traceroute 작동 방식을 실제로보고 싶다면 CodeProject에서 예제 C 코드 구현을 다운로드 할 수 있습니다.
요약하면 간단히 ICMP 소켓을 열고 traceroute는 대상에 도달 할 때까지 setsockopt를 사용하여 TTL을 증가시킵니다.
- 1. 어떻게 SYSTEM 아래에서 응용 프로그램을 실행할 수 있습니까?
- 2. 어떻게 텔넷을 통해 파이썬 프로그램을 실행할 수 있습니까?
- 3. 들어오는 호출을 거절하면 iPhone 응용 프로그램을 어떻게 실행할 수 있습니까?
- 4. 어떻게 PHP로 백그라운드 (비 차단)에서 프로그램을 실행할 수 있습니까?
- 5. 내 % PATH %에서 MSBuild를 사용하여 프로그램을 어떻게 실행할 수 있습니까?
- 6. 종료를 기다리지 않고 어떻게 외부 프로그램을 실행할 수 있습니까?
- 7. 시스템 프로 시저를 실행할 수있는 권한이 있습니까?
- 8. 원시 소켓에 루트 권한이 필요합니다.
- 9. Windows CE에서 Java 프로그램을 실행할 수 있습니까?
- 10. Mono에서 .NET 4 프로그램을 실행할 수 있습니까?
- 11. Android에서 MIDP 응용 프로그램을 실행할 수 있습니까
- 12. 이렇게 서버/클라이언트 프로그램을 실행할 수 있습니까?
- 13. 이 프로그램을 몇 번이나 실행할 수 있습니까?
- 14. Biztalk에서 콘솔 응용 프로그램을 실행할 수 있습니까?
- 15. 스레드에서 메인 QT 프로그램을 실행할 수 있습니까?
- 16. Traceroute Theory
- 17. 설치 프로그램을 시작할 때 프로그램을 실행할 수 있습니까?
- 18. 프로그램을 실행할 수 없습니다. 실행중인 명령 "dqiitg0c.cmdline"
- 19. Android : 디렉토리를 열 수있는 권한이 있는지 어떻게 알 수 있습니까?
- 20. 왜 GDB를 실행하기 위해 루트 권한이 필요합니까?
- 21. jQuery로 어떻게 루트 div를 찾을 수 있습니까?
- 22. 어떻게 루트 요소의 속성을 얻을 수 있습니까?
- 23. TCP Traceroute in C#
- 24. 어셈블리 프로그램을 실행할 수 없습니다.
- 25. Trac을 오프라인에서 실행할 수 있습니까?
- 26. PF_PACKET-family 소켓은 루트 권한이 필요합니다. 어떻게 리눅스에서 설정합니까?
- 27. 독립 실행 형 대신 브라우저에서 JWS 애플릿을 실행할 수 있습니까?
- 28. 웹을 통해 대화 형 명령을 실행할 수 있습니까?
- 29. 에뮬레이터없이 독립 실행 형 데스크톱 응용 프로그램으로 안드로이드 응용 프로그램을 실행할 수 있습니까?
- 30. 관리자 권한없이 UAC가 켜지면 프로그램을 디스크의 루트 디렉토리에 쓸 수 있습니까?
소리가 나는 것처럼 보이지만 조금 복잡합니다. – UnkwnTech
실제로 traceroute가하는 일입니다. – Ferruccio
C에서 원시 소켓을 사용하지 않고 TTL을 늘리는 방법은 무엇입니까? – brian