
저는 Mac OS X에서 DTrace를 다루다가 설정된 연결에 대한 정보를 인쇄하는 다음 스크립트를 발견했습니다.
$ 고양이 스크립트.d
syscall::connect:entry
{
printf("execname: %s\n", execname);
printf("pid: %d\n", pid);
printf("sockfd: %d\n",arg0);
socks = (struct sockaddr*)copyin(arg1, arg2);
hport = (uint_t)socks->sa_data[0];
lport = (uint_t)socks->sa_data[1];
hport <<= 8;
port = hport + lport;
printf("Port number: %d\n", port); printf("IP address: %d.%d.%d.%d\n",
socks->sa_data[2],
socks->sa_data[3],
socks->sa_data[4],
socks->sa_data[5]);
printf("======\n");
}
하나의 창에서 실행합니다:
$ sudo dtrace -s ./script.d
그런 다음 다른 창에서 다른 컴퓨터로 SSH를 통해 연결합니다. dtrace 창에서 다음 출력을 얻습니다.
CPU ID FUNCTION:NAME
0 18696 connect:entry execname: ssh
pid: 5446
sockfd: 3
Port number: 22
IP address: 192.168.0.207
======
0 18696 connect:entry execname: ssh
pid: 5446
sockfd: 5
Port number: 12148
IP address: 109.112.47.108
======
^C
제가 설명할 수 있는 첫 번째 IP 주소(192.168.0.207)는 제가 연결하려는 시스템입니다. 하지만 109.112.47.108 시스템은 무엇입니까? tcpdump나 netstat -an에는 표시되지 않습니다.
내 dtrace 코드에 뭔가가 있거나 연결 시스템 호출이 어떻게 작동하는지 이해하고 있나요?
답변1
나는 그것을 알아낸 것 같습니다. 그것은 Solarius 사이트에서 가져온 dtrace 스크립트이며 BSD용으로 변경되어야 합니다.
답변2
해당 주소에 대한 경로 추적을 시도하고 그것이 어디에 있는지 확인하십시오. 단지 몇 홉만 떨어져 있다면 방화벽이나 스위치일 가능성이 높습니다.
답변3
이탈리아의 보다폰 IP 주소입니다. 유럽/이탈리아의 ISP에 연결되어 있습니까? 그렇지 않다면 걱정을 시작하는 것이 좋습니다.
답변4
은 무슨 grep 'sshd.*from' secure.log
뜻인가요? 귀하 이외의 누군가가 SSH를 통해 로그인했다면 문제가 있는 것입니다. 그렇지 않다면 아마도실패한 무차별 대입 시도. DenyHosts 또는 Fail2Ban을 실행 중입니까?
syscall::connect에 대한 문서를 찾을 수 없지만 소켓의 양쪽 끝을 인쇄하는 것처럼 보입니다. 다른 컴퓨터에서 스크립트와 SSH를 실행하면 어떻게 되나요?