Eu tenho um pequeno script BASH que gostaria de rodar em alguns Macs (uma mistura de 10.8.5 e 10.9.4). Gostaria de acionar o script sempre que meu mac tentar se conectar a outro através de uma porta TCP específica. Os endereços IP de ambos os computadores são conhecidos e posso ver o tráfego (conexão na porta 6472) quando assisto via nettop ou console.
O que não consegui encontrar - e talvez não esteja pesquisando corretamente - é uma ferramenta que será executada em segundo plano e observará a solicitação de conexão, depois executará um executável quando ocorrer. Suponho que poderia preparar um, mas isso parece ser um problema que outros já resolveram. Qualquer direção para uma solução existente seria bem-vinda.
Obrigado! Mike
fonte
Provavelmente, a abordagem mais versátil e personalizada para concluir sua busca é ler atentamente
dtrace
.Use um soquete genérico ou provedor tcp e execute o script no modo destrutivo para chamar
system()
do kernel ou use Rastreamento de Limite de Função (FBT) como seu provedor. Este último tornará seu script dependente da versão do OSX.Brincando um pouco, eu vim com algo que deveria lhe fornecer forragem suficiente para a sua solução final usando um provedor de soquete (para que ele funcione nas duas máquinas MacOSX):
Salve-o em um arquivo (digamos
./socket_connect_mac_simple.d
) e, em seguida, chame o código da seguinte maneira:Abra outro terminal e inicie
nc
como servidor:E em outro terminal, conecte-se a ele:
Sua saída deve parecer algo assim:
Obviamente, você estará substituindo
nc
sua lista de daemon na porta 6472 e também precisará chamar seu script bash onde coloquei osystem("date")
fragmento de código. Fora isso, deve funcionar exatamente como você o descreveu.Certifique-se de ler a documentação detalhada sobre a chamada do modo destrutivo do dtrace
system()
: Chamadas do modo destrutivo no DTracefonte