Smokeping의 DNS 감지를 테스트하기 위해 에코 프로그램을 사용하고 있습니다.문서, 그러나 저는 Smokeping을 통해 명령을 실행할 때 분할 오류가 발생했습니다. Smokeping이 실행하려고 했던 명령을 잡고 systemctl status smokeping.service
일반 사용자 및 루트로 실행해 보았습니다.
echoping -w 1 -p 6 -t 1 -6 -m /usr/lib/echoping/dns.so -n 20 facebook.com -t AAAA --tcp facebook.com
종료되는 이유는 다음과 같습니다.Segmentation fault (core dumped)
strace
출력은 다음과 같습니다여기.
내 테스트 상자의 배포판은 Arch Linux 4.20 커널입니다. 나는 또한 이것을 LTS 커널 4.19에서 테스트했지만 성공하지 못했습니다.
어떤 아이디어가 있나요?
편집하다:
Smokeping이 실행하려고 하는 실제 명령은 다음과 같습니다.
echoping -w 1 -P 0xa0 -p 6 -t 1 -6 -m /usr/lib/echoping/dns.so -n 20 facebook.com -t AAAA --tcp facebook.com
(게시하기 전에 플래그를 생략하려고 해서 놓쳤는 -P 0xa0
데 최근에 실행한 명령 이전에 복사했어야 했는데...)
고쳐 쓰다:
코어 덤프에서 역추적:
$ gdb /usr/bin/echoping core.27236
GNU gdb (GDB) 8.2.1
...
Reading symbols from /usr/bin/echoping...(no debugging symbols found)...done.
[New LWP 27236]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Core was generated by `echoping -w 1 -P 0xa0 -p 6 -t 1 -6 -m /usr/lib/echoping/dns.so -n 20 facebook.c'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f73c938246a in init () from /usr/lib/echoping/dns.so
(gdb) backtrace full
#0 0x00007f73c938246a in init () from /usr/lib/echoping/dns.so
No symbol table info available.
#1 0x0000564855557d58 in main ()
No symbol table info available.
답변1
이것은 단지 Python의 버그 echoping(1)
이므로 보고해야 합니다(이전 버전에서 수정되지 않았는지 확인한 후).
util.c
소스 코드 파일 에는 다음과 같은 작은 cx-er가 있습니다.
char *
to_upper(char *input)
{
int c;
char *result;
result = (char *) malloc(strlen(input));
for (c = 0; c < strlen(input); c++)
result[c] = toupper((int)input[c]);
result[strlen(input)] = '\0';
return result;
}
result[strlen(input)]
할당된 버퍼의 길이를 초과하여 1바이트가 어떻게 기록되는지 참고하세요 malloc()
.
하지만 그게 전부는 아닙니다. 올바른 프로토타입(x86-64에서 64비트 포인터를 반환)을 선언하는 대신 to_upper()
컴파일러가 32비트 int를 반환한다고 가정하고강제 시전반환 값은 다음 (char*)
과 같습니다 plugins/dns/dns.c
.
char *
init(const int argc, const char **argv)
{
...
upper_type_name = (char *) to_upper(type_name);
후자가 죽였어, 내 생각엔 이건 아닌 것 같아한 번x86-64에서 실행하는 경우 유일한 희망은 시스템을 다중 아키텍처로 구성하고 echoping
데비안의 예(테스트되지 않음)로 설치하는 것입니다.
apt-get remove echoping
dpkg --add-architecture i386
apt-get update
apt-get install echoping:i386
apt-get source echoping
[데비안 9의 echoping-6.0.2 소스 코드를 사용했습니다. ]