Misc. fixes
This commit is contained in:
parent
8bcbafd05c
commit
4822730e19
6 changed files with 494 additions and 195 deletions
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
SHELL := bash
|
SHELL := bash
|
||||||
|
|
||||||
NAME = ft_ping
|
NAME = ft_strace
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
W_FLAGS = -Wall -Wextra -Werror
|
W_FLAGS = -Wall -Wextra -Werror
|
||||||
|
|
@ -31,7 +31,7 @@ INC_DIR = includes/
|
||||||
OBJ_DIR = objs/
|
OBJ_DIR = objs/
|
||||||
|
|
||||||
SRC_BASE = \
|
SRC_BASE = \
|
||||||
ping.c\
|
strace.c\
|
||||||
|
|
||||||
SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE))
|
SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE))
|
||||||
OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o))
|
OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o))
|
||||||
|
|
@ -42,12 +42,11 @@ all :
|
||||||
@make -C $(LIBFT_DIR)
|
@make -C $(LIBFT_DIR)
|
||||||
@make -j $(NAME)
|
@make -j $(NAME)
|
||||||
|
|
||||||
$(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) $(CLIENT_OBJ)
|
$(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS)
|
||||||
@$(CC) $(OBJS) -o $@ \
|
@$(CC) $(OBJS) -o $@ \
|
||||||
-I $(INC_DIR) \
|
-I $(INC_DIR) \
|
||||||
-I $(LIBFT_INC) \
|
-I $(LIBFT_INC) \
|
||||||
$(LIBFT_LIB) $(CLIENT_OBJ) $(FLAGS) \
|
$(LIBFT_LIB) $(FLAGS)
|
||||||
-lm
|
|
||||||
@printf "\r\033[38;5;117m✓ MAKE $@ \033[0m\033[K\n"
|
@printf "\r\033[38;5;117m✓ MAKE $@ \033[0m\033[K\n"
|
||||||
|
|
||||||
$(LIBFT_LIB):
|
$(LIBFT_LIB):
|
||||||
|
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
/* ************************************************************************** */
|
|
||||||
/* */
|
|
||||||
/* ::: :::::::: */
|
|
||||||
/* ft_ping.h :+: :+: :+: */
|
|
||||||
/* +:+ +:+ +:+ */
|
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
|
||||||
/* +#+#+#+#+#+ +#+ */
|
|
||||||
/* Created: 2017/04/22 14:10:24 by jhalford #+# #+# */
|
|
||||||
/* Updated: 2017/04/22 15:52:07 by jhalford ### ########.fr */
|
|
||||||
/* */
|
|
||||||
/* ************************************************************************** */
|
|
||||||
|
|
||||||
#ifndef FT_PING_H
|
|
||||||
# define FT_PING_H
|
|
||||||
|
|
||||||
# include "libft.h"
|
|
||||||
# include <fcntl.h>
|
|
||||||
# include <errno.h>
|
|
||||||
# include <sys/socket.h>
|
|
||||||
# include <sys/time.h>
|
|
||||||
# include <resolv.h>
|
|
||||||
# include <netdb.h>
|
|
||||||
# include <netinet/in.h>
|
|
||||||
# include <netinet/ip.h>
|
|
||||||
# include <netinet/ip_icmp.h>
|
|
||||||
# include <sys/wait.h>
|
|
||||||
|
|
||||||
#define PACKETSIZE 64
|
|
||||||
|
|
||||||
struct s_packet
|
|
||||||
{
|
|
||||||
struct icmp hdr;
|
|
||||||
char msg[PACKETSIZE - sizeof(struct icmp)];
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
367
strace/includes/strace.h
Normal file
367
strace/includes/strace.h
Normal file
|
|
@ -0,0 +1,367 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* ft_ping.h :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2017/04/22 14:10:24 by jhalford #+# #+# */
|
||||||
|
/* Updated: 2017/04/22 15:52:07 by jhalford ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#ifndef FT_STRACE_H
|
||||||
|
# define FT_STRACE_H
|
||||||
|
|
||||||
|
# include "libft.h"
|
||||||
|
# include <sys/ptrace.h>
|
||||||
|
# include <sys/user.h>
|
||||||
|
# include <sys/wait.h>
|
||||||
|
|
||||||
|
enum e_param {
|
||||||
|
PARAM_NUMBER = 1,
|
||||||
|
PARAM_STRING,
|
||||||
|
PARAM_ADDR,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct s_syscall {
|
||||||
|
char name[40];
|
||||||
|
enum e_param params[7];
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct s_syscall t_syscall;
|
||||||
|
|
||||||
|
t_syscall g_syscalls[] = {
|
||||||
|
{"read", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"write", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"open", {PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"close", {PARAM_NUMBER, 0}},
|
||||||
|
|
||||||
|
{"stat", {PARAM_STRING, PARAM_ADDR, 0}},
|
||||||
|
{"fstat", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"lstat", {PARAM_STRING, PARAM_ADDR, 0}},
|
||||||
|
{"poll", {PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"lseek", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"mmap", {PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"mprotect", {PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"munmap", {PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"brk", {PARAM_ADDR, 0}},
|
||||||
|
{"rt_sigaction", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"rt_sigprocmask", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"rt_sigreturn", {PARAM_NUMBER, 0}},
|
||||||
|
{"ioctl", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"pread64", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"pwrite64", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"readv", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"writev", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"access", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"pipe", {PARAM_ADDR, 0}},
|
||||||
|
{"select", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"sched_yield", {0}},
|
||||||
|
{"mremap", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"msync", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"mincore", {PARAM_NUMBER, PARAM_NUMBER, PARAM_STRING, 0}},
|
||||||
|
{"madvise", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"shmget", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"shmat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"shmctl", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"dup", {PARAM_NUMBER, 0}},
|
||||||
|
{"dup2", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"pause", {0}},
|
||||||
|
{"nanosleep", {PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"getitimer", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"alarm", {PARAM_NUMBER, 0}},
|
||||||
|
{"setitimer", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"getpid", {0}},
|
||||||
|
{"sendfile", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"socket", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"connect", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"accept", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"sendto", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"recvfrom", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"sendmsg", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"recvmsg", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"shutdown", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"bind", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"listen", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getsockname", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"getpeername", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"socketpair", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"setsockopt", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"getsockopt", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_STRING, PARAM_ADDR, 0}},
|
||||||
|
{"clone", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"fork", {0}},
|
||||||
|
{"vfork", {0}},
|
||||||
|
{"execve", {PARAM_STRING, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"exit", {PARAM_NUMBER, 0}},
|
||||||
|
{"wait4", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"kill", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"uname", {PARAM_ADDR, 0}},
|
||||||
|
{"semget", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"semop", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"semctl", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"shmdt", {PARAM_STRING, 0}},
|
||||||
|
{"msgget", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"msgsnd", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"msgrcv", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"msgctl", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"fcntl", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"flock", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"fsync", {PARAM_NUMBER, 0}},
|
||||||
|
{"fdatasync", {PARAM_NUMBER, 0}},
|
||||||
|
{"truncate", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"ftruncate", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getdents", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"getcwd", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"chdir", {PARAM_STRING, 0}},
|
||||||
|
{"fchdir", {PARAM_NUMBER, 0}},
|
||||||
|
{"rename", {PARAM_STRING, PARAM_STRING, 0}},
|
||||||
|
{"mkdir", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"rmdir", {PARAM_STRING, 0}},
|
||||||
|
{"creat", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"link", {PARAM_STRING, PARAM_STRING, 0}},
|
||||||
|
{"unlink", {PARAM_STRING, 0}},
|
||||||
|
{"symlink", {PARAM_STRING, PARAM_STRING, 0}},
|
||||||
|
{"readlink", {PARAM_STRING, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"chmod", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"fchmod", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"chown", {PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"fchown", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"lchown", {PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"umask", {PARAM_NUMBER, 0}},
|
||||||
|
{"gettimeofday", {PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"getrlimit", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"getrusage", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"sysinfo", {PARAM_ADDR, 0}},
|
||||||
|
{"times", {PARAM_ADDR, 0}},
|
||||||
|
{"ptrace", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getuid", {0}},
|
||||||
|
{"syslog", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"getgid", {0}},
|
||||||
|
{"setuid", {PARAM_NUMBER, 0}},
|
||||||
|
{"setgid", {PARAM_NUMBER, 0}},
|
||||||
|
{"geteuid", {0}},
|
||||||
|
{"getegid", {0}},
|
||||||
|
{"setpgid", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getppid", {0}},
|
||||||
|
{"getpgrp", {0}},
|
||||||
|
{"setsid", {0}},
|
||||||
|
{"setreuid", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"setregid", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getgroups", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"setgroups", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"setresuid", {PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"getresuid", {PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"setresgid", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getresgid", {PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"getpgid", {PARAM_NUMBER, 0}},
|
||||||
|
{"setfsuid", {PARAM_NUMBER, 0}},
|
||||||
|
{"setfsgid", {PARAM_NUMBER, 0}},
|
||||||
|
{"getsid", {PARAM_NUMBER, 0}},
|
||||||
|
{"capget", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"capset", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"rt_sigpending", {PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"rt_sigtimedwait", {PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"rt_sigqueueinfo", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"rt_sigsuspend", {PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"sigaltstack", {PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"utime", {PARAM_STRING, PARAM_ADDR, 0}},
|
||||||
|
{"mknod", {PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"uselib", {PARAM_NUMBER, 0}},
|
||||||
|
{"personality", {PARAM_NUMBER, 0}},
|
||||||
|
{"ustat", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"statfs", {PARAM_STRING, PARAM_ADDR, 0}},
|
||||||
|
{"fstatfs", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"sysfs", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getpriority", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"setpriority", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"sched_setparam", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"sched_getparam", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"sched_setscheduler", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"sched_getscheduler", {PARAM_NUMBER, 0}},
|
||||||
|
{"sched_get_priority_max", {PARAM_NUMBER, 0}},
|
||||||
|
{"sched_get_priority_min", {PARAM_NUMBER, 0}},
|
||||||
|
{"sched_rr_get_interval", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"mlock", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"munlock", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"mlockall", {PARAM_NUMBER, 0}},
|
||||||
|
{"munlockall", {0}},
|
||||||
|
{"vhangup", {0}},
|
||||||
|
{"modify_ldt", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"pivot_root", {PARAM_STRING, PARAM_STRING, 0}},
|
||||||
|
{"_sysctl", {PARAM_ADDR, 0}},
|
||||||
|
{"prctl", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"arch_prctl", {PARAM_ADDR, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"adjtimex", {PARAM_ADDR, 0}},
|
||||||
|
{"setrlimit", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"chroot", {PARAM_STRING, 0}},
|
||||||
|
{"sync", {0}},
|
||||||
|
{"acct", {PARAM_STRING, 0}},
|
||||||
|
{"settimeofday", {PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"mount", {PARAM_STRING, PARAM_STRING, PARAM_STRING, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"umount2", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"swapon", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"swapoff", {PARAM_STRING, 0}},
|
||||||
|
{"reboot", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"sethostname", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"setdomainname", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"iopl", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"ioperm", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"create_module", {PARAM_NUMBER, 0}},
|
||||||
|
{"init_module", {PARAM_ADDR, PARAM_NUMBER, PARAM_STRING, 0}},
|
||||||
|
{"delete_module", {PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"get_kernel_syms", {PARAM_NUMBER, 0}},
|
||||||
|
{"query_module", {PARAM_NUMBER, 0}},
|
||||||
|
{"quotactl", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"nfsservctl", {PARAM_NUMBER, 0}},
|
||||||
|
{"getpmsg", {PARAM_NUMBER, 0}},
|
||||||
|
{"putpmsg", {PARAM_NUMBER, 0}},
|
||||||
|
{"afs_syscall", {PARAM_NUMBER, 0}},
|
||||||
|
{"tuxcall", {PARAM_NUMBER, 0}},
|
||||||
|
{"security", {PARAM_NUMBER, 0}},
|
||||||
|
{"gettid", {0}},
|
||||||
|
{"readahead", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"setxattr", {PARAM_STRING, PARAM_STRING, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"lsetxattr", {PARAM_STRING, PARAM_STRING, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"fsetxattr", {PARAM_NUMBER, PARAM_STRING, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getxattr", {PARAM_STRING, PARAM_STRING, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"lgetxattr", {PARAM_STRING, PARAM_STRING, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"fgetxattr", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"listxattr", {PARAM_STRING, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"llistxattr", {PARAM_STRING, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"flistxattr", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"removexattr", {PARAM_STRING, PARAM_STRING, 0}},
|
||||||
|
{"lremovexattr", {PARAM_STRING, PARAM_STRING, 0}},
|
||||||
|
{"fremovexattr", {PARAM_NUMBER, PARAM_STRING, 0}},
|
||||||
|
{"tkill", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"time", {PARAM_ADDR, 0}},
|
||||||
|
{"futex", {PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"sched_setaffinity", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"sched_getaffinity", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"set_thread_area", {PARAM_NUMBER, 0}},
|
||||||
|
{"io_setup", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"io_destroy", {PARAM_NUMBER, 0}},
|
||||||
|
{"io_getevents", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"io_submit", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"io_cancel", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"get_thread_area", {PARAM_NUMBER, 0}},
|
||||||
|
{"lookup_dcookie", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"epoll_create", {PARAM_NUMBER, 0}},
|
||||||
|
{"epoll_ctl_old", {PARAM_NUMBER, 0}},
|
||||||
|
{"epoll_wait_old", {PARAM_NUMBER, 0}},
|
||||||
|
{"remap_file_pages", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getdents64", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"set_tid_address", {PARAM_ADDR, 0}},
|
||||||
|
{"restart_syscall", {0}},
|
||||||
|
{"semtimedop", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"fadvise64", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"timer_create", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"timer_settime", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"timer_gettime", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"timer_getoverrun", {PARAM_NUMBER, 0}},
|
||||||
|
{"timer_delete", {PARAM_NUMBER, 0}},
|
||||||
|
{"clock_settime", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"clock_gettime", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"clock_getres", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"clock_nanosleep", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"exit_group", {PARAM_NUMBER, 0}},
|
||||||
|
{"epoll_wait", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"epoll_ctl", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"tgkill", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"utimes", {PARAM_STRING, PARAM_ADDR, 0}},
|
||||||
|
{"vserver", {PARAM_NUMBER, 0}},
|
||||||
|
{"mbind", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"set_mempolicy", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"get_mempolicy", {PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"mq_open", {PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"mq_unlink", {PARAM_STRING, 0}},
|
||||||
|
{"mq_timedsend", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"mq_timedreceive", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"mq_notify", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"mq_getsetattr", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"kexec_load", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"waitid", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"add_key", {PARAM_STRING, PARAM_STRING, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"request_key", {PARAM_STRING, PARAM_STRING, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"keyctl", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"ioprio_set", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"ioprio_get", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"inotify_init", {0}},
|
||||||
|
{"inotify_add_watch", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"inotify_rm_watch", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"migrate_pages", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"openat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"mkdirat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"mknodat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"fchownat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"futimesat", {PARAM_NUMBER, PARAM_STRING, PARAM_ADDR, 0}},
|
||||||
|
{"newfstatat", {PARAM_NUMBER, PARAM_STRING, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"unlinkat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"renameat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_STRING, 0}},
|
||||||
|
{"linkat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"symlinkat", {PARAM_STRING, PARAM_NUMBER, PARAM_STRING, 0}},
|
||||||
|
{"readlinkat", {PARAM_NUMBER, PARAM_STRING, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"fchmodat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"faccessat", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"pselect6", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"ppoll", {PARAM_ADDR, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"unshare", {PARAM_NUMBER, 0}},
|
||||||
|
{"set_robust_list", {PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"get_robust_list", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"splice", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"tee", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"sync_file_range", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"vmsplice", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"move_pages", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"utimensat", {PARAM_NUMBER, PARAM_STRING, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"epoll_pwait", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"signalfd", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"timerfd_create", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"eventfd", {PARAM_NUMBER, 0}},
|
||||||
|
{"fallocate", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"timerfd_settime", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"timerfd_gettime", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"accept4", {PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"signalfd4", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"eventfd2", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"epoll_create1", {PARAM_NUMBER, 0}},
|
||||||
|
{"dup3", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"pipe2", {PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"inotify_init1", {PARAM_NUMBER, 0}},
|
||||||
|
{"preadv", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"pwritev", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"rt_tgsigqueueinfo", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"perf_event_open", {PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"recvmmsg", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"fanotify_init", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"fanotify_mark", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"prlimit64", {PARAM_NUMBER, PARAM_NUMBER, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"name_to_handle_at", {PARAM_NUMBER, PARAM_STRING, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"open_by_handle_at", {PARAM_NUMBER, PARAM_STRING, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"clock_adjtime", {PARAM_NUMBER, PARAM_ADDR, 0}},
|
||||||
|
{"syncfs", {PARAM_NUMBER, 0}},
|
||||||
|
{"sendmmsg", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"setns", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"getcpu", {PARAM_ADDR, PARAM_ADDR, PARAM_ADDR, 0}},
|
||||||
|
{"process_vm_readv", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"process_vm_writev", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"kcmp", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"finit_module", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"sched_setattr", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"sched_getattr", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"renameat2", {PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"seccomp", {PARAM_NUMBER, PARAM_NUMBER, PARAM_STRING, 0}},
|
||||||
|
{"getrandom", {PARAM_STRING, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"memfd_create", {PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"kexec_file_load", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_STRING, PARAM_NUMBER, 0}},
|
||||||
|
{"bpf", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"stub_execveat", {PARAM_NUMBER, PARAM_STRING, PARAM_ADDR, PARAM_ADDR, PARAM_NUMBER, 0}},
|
||||||
|
{"userfaultfd", {PARAM_NUMBER, 0}},
|
||||||
|
{"membarrier", {PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"mlock2", {PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"copy_file_range", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"preadv2", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
{"pwritev2", {PARAM_NUMBER, PARAM_ADDR, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, PARAM_NUMBER, 0}},
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -1,154 +0,0 @@
|
||||||
/* ************************************************************************** */
|
|
||||||
/* */
|
|
||||||
/* ::: :::::::: */
|
|
||||||
/* main.c :+: :+: :+: */
|
|
||||||
/* +:+ +:+ +:+ */
|
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
|
||||||
/* +#+#+#+#+#+ +#+ */
|
|
||||||
/* Created: 2017/04/22 14:10:24 by jhalford #+# #+# */
|
|
||||||
/* Updated: 2017/04/23 18:18:41 by jhalford ### ########.fr */
|
|
||||||
/* */
|
|
||||||
/* ************************************************************************** */
|
|
||||||
|
|
||||||
#include "ping.h"
|
|
||||||
|
|
||||||
int g_pid=-1;
|
|
||||||
int g_pkt_rec=0;
|
|
||||||
char g_domain[256];
|
|
||||||
struct s_stats g_rs;
|
|
||||||
|
|
||||||
unsigned short ping_cksum(void *b, int len)
|
|
||||||
{
|
|
||||||
unsigned short *buf = b;
|
|
||||||
unsigned int sum=0;
|
|
||||||
|
|
||||||
for (sum = 0; len > 1; len -= 2)
|
|
||||||
sum += *((unsigned short*)buf++);
|
|
||||||
if (len == 1)
|
|
||||||
sum += *(unsigned char*)buf;
|
|
||||||
|
|
||||||
sum = (sum >> 16) + (sum & 0xFFFF);
|
|
||||||
return (~(sum + (sum >> 16)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void display(void *buf, int bytes, struct sockaddr_in *addr)
|
|
||||||
{
|
|
||||||
struct ip *ip = buf;
|
|
||||||
struct icmp *icmp;
|
|
||||||
struct s_packet *pkt;
|
|
||||||
int hlen;
|
|
||||||
char addrstr[INET_ADDRSTRLEN];
|
|
||||||
struct timeval start, end, triptime;
|
|
||||||
double diff;
|
|
||||||
|
|
||||||
(void)bytes;
|
|
||||||
hlen = ip->ip_hl << 2;
|
|
||||||
pkt = (struct s_packet*)(buf + hlen);
|
|
||||||
icmp = &pkt->hdr;
|
|
||||||
start = *(struct timeval*)&pkt->msg;
|
|
||||||
|
|
||||||
if (icmp->icmp_id != g_pid)
|
|
||||||
return ;
|
|
||||||
if (gettimeofday(&end, NULL) != 0)
|
|
||||||
return ;
|
|
||||||
timersub(&end, &start, &triptime);
|
|
||||||
diff = (triptime.tv_sec + triptime.tv_usec / 1000000.0) * 1000.0;
|
|
||||||
rs_push(diff);
|
|
||||||
g_pkt_rec++;
|
|
||||||
printf("%d bytes from %s: icmp_seq=%d ttl=%i time=%.3f ms\n",
|
|
||||||
ip->ip_len,
|
|
||||||
inet_ntop(AF_INET, &(addr->sin_addr), addrstr, INET_ADDRSTRLEN),
|
|
||||||
icmp->icmp_seq, ip->ip_ttl, diff);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ping(struct sockaddr_in *addr)
|
|
||||||
{
|
|
||||||
const int val = 255;
|
|
||||||
int i;
|
|
||||||
int sd;
|
|
||||||
int cnt;
|
|
||||||
struct s_packet pkt;
|
|
||||||
struct timeval time;
|
|
||||||
|
|
||||||
if ((sd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0)
|
|
||||||
return (perror("sender socket"));
|
|
||||||
if (setsockopt(sd, 0, IP_TTL, &val, sizeof(val)) != 0)
|
|
||||||
perror("set TTL option");
|
|
||||||
cnt = 0;
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
bzero(&pkt, sizeof(pkt));
|
|
||||||
pkt.hdr.icmp_type = ICMP_ECHO;
|
|
||||||
pkt.hdr.icmp_id = g_pid;
|
|
||||||
pkt.hdr.icmp_seq = cnt++;
|
|
||||||
|
|
||||||
for (i=0; i < (int)sizeof(pkt.msg); i++)
|
|
||||||
pkt.msg[i] = i+'0';
|
|
||||||
pkt.msg[i] = 0;
|
|
||||||
if (gettimeofday(&time, NULL) != 0)
|
|
||||||
return ;
|
|
||||||
ft_memcpy(pkt.msg, (void*)&time, sizeof(time));
|
|
||||||
time = *(struct timeval*)&pkt.msg;
|
|
||||||
pkt.hdr.icmp_cksum = ping_cksum(&pkt, sizeof(pkt));
|
|
||||||
if (sendto(sd, &pkt, sizeof(pkt), 0, (struct sockaddr*)addr, sizeof(*addr)) <= 0)
|
|
||||||
perror("sendto");
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void stats_recap(int signo)
|
|
||||||
{
|
|
||||||
double loss;
|
|
||||||
|
|
||||||
(void)signo;
|
|
||||||
rs_calcmore();
|
|
||||||
loss = g_rs.count ? 100 * ((float) (g_rs.count - g_pkt_rec) / (float)g_rs.count) : 0;
|
|
||||||
printf("\n--- %s ping statistics ---", g_domain);
|
|
||||||
printf("\n%d packets transmitted, %d packets received, %0.1f%% packet loss", g_rs.count, g_pkt_rec, loss);
|
|
||||||
printf("\nround-trip min/avg/max/stddev = %.3f/%.3f/%.3f/%.3f ms", g_rs.min, g_rs.avg, g_rs.max, g_rs.stdev);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int ac, char **av)
|
|
||||||
{
|
|
||||||
struct sockaddr_in *addr;
|
|
||||||
struct addrinfo *result, hints;
|
|
||||||
char addrstr[INET_ADDRSTRLEN];
|
|
||||||
|
|
||||||
if (ac != 2)
|
|
||||||
{
|
|
||||||
printf("usage: %s <addr>\n", av[0]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
memset (&hints, 0, sizeof (hints));
|
|
||||||
hints.ai_family = PF_UNSPEC;
|
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
|
||||||
hints.ai_flags |= AI_CANONNAME;
|
|
||||||
if (getaddrinfo(av[1], NULL, &hints, &result) != 0)
|
|
||||||
{
|
|
||||||
perror("getaddrinfo");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
addr = (struct sockaddr_in*)result->ai_addr;
|
|
||||||
inet_ntop(AF_INET, &(addr->sin_addr), addrstr, INET_ADDRSTRLEN);
|
|
||||||
|
|
||||||
g_pid = getpid();
|
|
||||||
ft_strcpy(g_domain, addrstr);
|
|
||||||
if (result->ai_canonname)
|
|
||||||
ft_strcpy(g_domain, result->ai_canonname);
|
|
||||||
printf("PING %s (%s): %i data bytes\n", FT_TRY(result->ai_canonname, addrstr), addrstr, 64);
|
|
||||||
if (fork() == 0)
|
|
||||||
{
|
|
||||||
signal(SIGINT, stats_recap);
|
|
||||||
rs_clear();
|
|
||||||
listener(PF_INET, SOCK_RAW, IPPROTO_ICMP, &display);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ping(addr);
|
|
||||||
wait(0);
|
|
||||||
}
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
112
strace/srcs/strace.c
Normal file
112
strace/srcs/strace.c
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* main.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2017/04/22 14:10:24 by jhalford #+# #+# */
|
||||||
|
/* Updated: 2017/04/23 18:18:41 by jhalford ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "strace.h"
|
||||||
|
|
||||||
|
extern char **environ;
|
||||||
|
|
||||||
|
extern t_syscall g_syscalls[];
|
||||||
|
|
||||||
|
#define LOAD_PARAMS(params, regs) do { \
|
||||||
|
ft_memcpy(params + 0, ®s->rdi, 8); \
|
||||||
|
ft_memcpy(params + 1, ®s->rsi, 8); \
|
||||||
|
ft_memcpy(params + 2, ®s->rdx, 8); \
|
||||||
|
ft_memcpy(params + 3, ®s->rcx, 8); \
|
||||||
|
ft_memcpy(params + 4, ®s->r8, 8); \
|
||||||
|
ft_memcpy(params + 5, ®s->r9, 8); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
void print_syscall_params(t_syscall syscall, struct user_regs_struct *regs)
|
||||||
|
{
|
||||||
|
enum e_param type;
|
||||||
|
unsigned long long params[7];
|
||||||
|
|
||||||
|
LOAD_PARAMS(params, regs);
|
||||||
|
for (int i = 0; syscall.params[i]; i++) {
|
||||||
|
type = syscall.params[i];
|
||||||
|
if (i != 0)
|
||||||
|
printf(", ");
|
||||||
|
if (type == PARAM_NUMBER)
|
||||||
|
printf("%d", (int)params[i]);
|
||||||
|
if (type == PARAM_STRING)
|
||||||
|
{
|
||||||
|
if (params[i] == 0)
|
||||||
|
printf("NULL");
|
||||||
|
/* else */
|
||||||
|
/* printf("\"%s\"", (char *)params[i]); */
|
||||||
|
}
|
||||||
|
if (type == PARAM_ADDR)
|
||||||
|
{
|
||||||
|
if (params[i] == 0)
|
||||||
|
printf("NULL");
|
||||||
|
else
|
||||||
|
printf("%#llx", params[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_syscall_ret(unsigned long long ret)
|
||||||
|
{
|
||||||
|
printf(") = ");
|
||||||
|
if ((signed long long)ret < 0)
|
||||||
|
printf("-1 (errno %lld)", -ret);
|
||||||
|
else if (ret >> 16)
|
||||||
|
printf("%#llx", ret);
|
||||||
|
else
|
||||||
|
printf("%lld", ret);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int ac, char **av)
|
||||||
|
{
|
||||||
|
int child;
|
||||||
|
int status;
|
||||||
|
unsigned long old;
|
||||||
|
struct user_regs_struct regs;
|
||||||
|
|
||||||
|
(void)ac;
|
||||||
|
if ((child = fork()) == 0) {
|
||||||
|
// child process
|
||||||
|
ptrace(PTRACE_TRACEME, child, 0, 0);
|
||||||
|
raise(SIGSTOP);
|
||||||
|
execve(av[1], av + 1, environ);
|
||||||
|
}
|
||||||
|
/* ptrace(PTRACE_SEIZE, child, 0, 0); */
|
||||||
|
wait(&status);
|
||||||
|
ptrace(PTRACE_SETOPTIONS, child, NULL, PTRACE_O_TRACEEXEC);
|
||||||
|
ptrace(PTRACE_SETOPTIONS, child, NULL, PTRACE_O_TRACESYSGOOD);
|
||||||
|
while (1) {
|
||||||
|
ptrace(PTRACE_SYSCALL, child, NULL, NULL);
|
||||||
|
waitpid(child, &status, 0);
|
||||||
|
if (WIFEXITED(status))
|
||||||
|
{
|
||||||
|
if (old != 0)
|
||||||
|
printf(") = ?\n+++ exited with %d +++\n", WEXITSTATUS(status));
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
else if (!(WIFSTOPPED(status) && WSTOPSIG(status) & 0x80))
|
||||||
|
continue ;
|
||||||
|
|
||||||
|
ptrace(PTRACE_GETREGS, child, NULL, ®s);
|
||||||
|
if (old != regs.rip) {
|
||||||
|
printf("%s(", g_syscalls[regs.orig_rax].name);
|
||||||
|
print_syscall_params(g_syscalls[regs.orig_rax], ®s);
|
||||||
|
old = regs.rip;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print_syscall_ret(regs.rax);
|
||||||
|
old = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
11
strace/test.c
Normal file
11
strace/test.c
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
write(1, "write in tracee\n", 16);
|
||||||
|
int fd = open("test.c", 0);
|
||||||
|
close(fd);
|
||||||
|
dup2(3, fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue