Esta informação não é (normalmente) registrada. Não há nenhum tempo de criação "disponível" para um arquivo , ctime
é para o tempo de alteração do arquivo inode / metadados. Assim, após o fato, geralmente você não pode determinar com segurança os tempos relativos ou absolutos.
Em qualquer sistema Linux (2.6.xe 3.x) que testei, as entradas /proc
relevantes não são instanciadas até que você as examine, todos os registros de data e hora são definidos para a hora em que o diretório é consultado pela primeira vez ( isto é, estes são criados sob demanda para mostrar o estado atual, o kernel não precisa de atualizações desnecessárias toda vez que qualquer manipulação de arquivo for alterada). Não esqueça que estes são todos symlinks , com timestamps independentes do alvo, e estes soquetes não "vivem" no sistema de arquivos.
$ strace -tt -f -e trace=bind,listen /usr/bin/nc -l -p 8080
13:23:23.693432 bind(3, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr(
"0.0.0.0")},16) = 0
13:23:23.693542 listen(3, 1) = 0
e em um terminal diferente, alguns segundos depois:
$ date; ls -cl --full-time /proc/$(pgrep -f "^/usr/bin/nc -l -p 8080")/fd
Mon May 19 13:23:31 IST 2014
total 0
lrwx------ 1 mr users 64 2014-05-19 13:23:31.344141947 +0100 0 -> /dev/pts/206
lrwx------ 1 mr users 64 2014-05-19 13:23:31.344141947 +0100 1 -> /dev/pts/206
lrwx------ 1 mr users 64 2014-05-19 13:23:31.344141947 +0100 2 -> /dev/pts/206
lrwx------ 1 mr users 64 2014-05-19 13:23:31.344141947 +0100 3 -> socket:[206347913]
Todos os tempos de ligação simbólica são definidos 8 segundos depois, quando ls
foi executado.
Observe o uso de strace
, esta é possivelmente a maneira mais simples (embora com uma pequena sobrecarga de desempenho) para observar a ordem das operações de rede relevantes. Você pode não precisar ou querer usar -f
, ele segue todos os processos (filhos) gerados, pode confundir a saída (cada linha de saída é prefixada com seu PID se for o caso).
O próximo método mais simples provavelmente usará auditd
/ auditctl
com regras (e filtragem cuidadosa!) para registrar as operações, mas isso também tem implicações de desempenho (em todo o sistema, se você ainda não estiver executando auditd
strace
afetará somente os processos monitorados).
Quando você tiver pares se conectando, você pode usar netstat
para ver os detalhes da conexão (a opção -p
pode ser útil, pois mostrará o processo) ou usar lsof
- embora nenhum deles mostre os registros de data e hora da conexão. Para gravar essas conexões usando strace
, adicione accept
à lista de syscalls na opção trace=
e adicione uma opção -T
para cronometrar cada syscall: accept()
(geralmente) bloqueará, mostrando apenas o timestamp foi invocado em vez de quando foi concluído. -T
isso permitirá que você calcule o tempo de conclusão.
A saída extra para accept()
se parece com:
13:25:46.022244 accept(3, {sa_family=AF_INET, sin_port=htons(57534), sin_addr=inet_addr(
"127.0.0.1")}, [16]) = 4 <3.167477>
mostrando que o soquete estava pronto para aceitar conexões às 13:25:46 e obteve sua primeira conexão 3.167 segundos depois.