Форум — Development ping generation 0 0 Как программно эмулировать ping ? есть ли какие-либо C(C++)-ые библиотеки, которые это облегчают ? Ссылка
[root@murr root]# ltrace -f -o ping.ltrace ping localhost PING localhost.localdomain (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.195 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.179 ms --- localhost.localdomain ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1015ms rtt min/avg/max/mdev = 0.179/0.187/0.195/0.008 ms [root@murr root]# cat ping.ltrace 12116 __libc_start_main(0x08049190, 2, 0xbffffa64, 0x08048ccc, 0x0804e0c4 <unfinished ...> 12116 __fxstat(3, 0, 0xbffff850) = 0 12116 __fxstat(3, 1, 0xbffff850) = 0 12116 __fxstat(3, 2, 0xbffff850) = 0 12116 socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) = 3 12116 __errno_location() = 0x40138060 12116 getuid() = 0 12116 setgroups(0, 0, 2, 0xbffff8c0, 0x40039709) = 0 12116 getpwnam("iputils") = 0x401395bc 12116 endpwent() = <void> 12116 chroot("/var/resolv") = 0 12116 chdir("/") = 0 12116 setgid(104) = 0 12116 setuid(104) = 0 12116 getopt(2, 0xbffffa64, "h?VQ:I:M:aUc:dfi:w:l:S:np:qrs:vL"...) = -1 12116 inet_aton("localhost", 0x08060df8) = 0 12116 gethostbyname("localhost") = 0x4013a474 12116 strncpy(0xbffff9c0, "localhost.localdomain", 63) = 0xbffff9c0 12116 socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 4 12116 connect(4, 0xbffff980, 16, 0x40020000, 3) = 0 12116 getsockname(4, 0x08060de4, 0xbffff908, 0x40020000, 3) = 0 12116 close(4) = 0 12116 setsockopt(3, SOL_RAW, ICMP_FILTER, 0xbffff904, 4) = 0 12116 setsockopt(3, SOL_IP, IP_RECVERR, 0xbffff900, 4) = 0 12116 setsockopt(3, SOL_SOCKET, SO_SNDBUF, 0x08062e80, 4) = 0 12116 setsockopt(3, SOL_SOCKET, SO_RCVBUF, 0xbffff8a8, 4) = 0 12116 getsockopt(3, SOL_SOCKET, SO_RCVBUF, 0xbffff8a8, 0xbffff8a4) = 0 12116 malloc(192) = 0x08064950 12116 inet_ntoa(0x0100007f) = "127.0.0.1" 12116 printf("PING %s (%s) ", "localhost.localdomain", "127.0.0.1") = 39 12116 printf("%d(%d) bytes of data.\n", 56, 84) = 22 12116 setsockopt(3, SOL_SOCKET, SO_TIMESTAMP, 0xbffff888, 4) = 0 12116 setsockopt(3, SOL_SOCKET, SO_SNDTIMEO, 0xbffff880, 8) = 0 12116 setsockopt(3, SOL_SOCKET, SO_RCVTIMEO, 0xbffff880, 8) = 0 12116 getpid() = 12116 12116 memset(0xbffff7a0, '\000', 140) = 0xbffff7a0 12116 sigaction(2, 0xbffff7a0, 0, 0x077905a6, 0x0804bc80) = 0 12116 memset(0xbffff7a0, '\000', 140) = 0xbffff7a0 12116 sigaction(14, 0xbffff7a0, 0, 0x077905a6, 0x0804bc80) = 0 12116 memset(0xbffff7a0, '\000', 140) = 0xbffff7a0 12116 sigaction(3, 0xbffff7a0, 0, 0x077905a6, 0x0804bc90) = 0 12116 gettimeofday(0x08062e58, NULL) = 0 12116 isatty(1) = 1 12116 ioctl(1, 21523, 0xbffff878) = 0 12116 gettimeofday(0x08060e2c, NULL) = 0 12116 gettimeofday(0xbfffe768, NULL) = 0 12116 sendmsg(3, 0x08050804, 0, 0, 0) = 64 12116 recvmsg(3, 0xbfffe800, 0, 0, 0) = 84 etc Проще только system ("ping"); ;) Murr ★★ (03.08.03 20:50:02 MSK) Ссылка
Енто верно, в socket.h прототипы функций API - на пол машинного экрана код будет для icmp. P.S: а ltrace - фича забавная, не видел раньше - но теперь оценил anonymous (03.08.03 21:30:52 MSK) Показать ответ Ссылка
Ответ на: комментарий от anonymous 03.08.03 21:30:52 MSK Ok. Спасибо. а можешь это в виде примера на C прислать ? - из вывода разбираться сложно. anonymous (04.08.03 21:51:33 MSK) Ссылка