Qual seria a maneira mais fácil de encontrar, com um script, se meu endereço IP foi alterado?
Informações de fundo:
Eu tenho uma conexão de modem a cabo doméstico padrão e meu ISP me atribui um IP dinâmico. Ele muda de vez em quando, os tempos de concessão do DHCP parecem irregulares.
Basicamente, estou fazendo minha própria coisa de DNS dinâmico e posso atualizar os registros DNS que apontam para o meu servidor doméstico com um clique. A única coisa que resta é detectar uma alteração de IP para que eu possa automatizar completamente o processo.
Agora, existem vários sites aqui que podem retornar seu endereço IP, e eu poderia usar um trabalho cron em wget
uma dessas páginas e grep
o endereço IP dele ... Mas parece um exagero em termos de uso de CPU / largura de banda, e não é muito BEIJO.
Estou perdendo uma maneira simples e elegante de recuperar meu IP público e verificar se ele mudou?
Informação extra: meu modem / roteador é um tijolo barato, não faz nada muito interessante nesse sentido. Meu servidor roda com o Centos 6.
fonte
Você pode consultar qualquer site que exiba seu IP para esta tarefa. Usando checkip.dyndns.com , pois é text.only.
Exemplo:
fonte
Eu tinha a mesma pergunta hoje e não estava satisfeito com as respostas que vi aqui ou no Google, então escrevi um script do PowerShell para me enviar uma notificação do Slack sempre que meu endereço IP mudar .
Se você preferir receber um email, clique nos links do script para ver uma versão diferente que ofereça suporte a emails do Outlook.
Espero que isso ajude alguém e ganhe um voto. :-)
Salve o texto a seguir em um arquivo .ps1. Edite-o conforme apropriado com seu próprio URL de webhook do Slack. Salve . Clique com o botão direito do mouse no arquivo para "Executar com o PowerShell".
Ou você pode agendá-lo para ser executado diariamente ou com frequência.
Para que o Agendador de tarefas funcione:
Eu tive que executar o PowerShell como administrador e, em seguida
Get-ExecutionPolicy
, executar , o que me disse que minha atual ExecutionPolicy era "Restrita".Então eu corri
Set-ExecutionPolicy RemoteSigned
(como mostrado aqui, mas isso me deixa nervoso: https://stackoverflow.com/a/26955050/470749 ).Em um prompt de comando básico do Windows, tentei executar o seguinte comando algumas vezes:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -File "C:\code\IP_change_detection_notification.ps1"
(uma vez para armazenar o IP e uma segunda vez para verificar se havia sido alterado).(Até conseguir que isso funcione, não se preocupe em tentar usar o Agendador de tarefas.)
Em seguida, agendei uma tarefa com
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
o programa e-ExecutionPolicy ByPass -File C:\code\IP_change_detection_notification.ps1
os argumentos.fonte
As respostas anteriores, excluindo a implementação do PS, não informam se o IP foi alterado. (Quero amar o PowerShell. Ryan fez um bom trabalho ao identificar por que não gosto: permissões de segurança de execução são incômodas).
A análise do IP não é necessária, desde que qualquer saída adicional não seja alterada quando o IP não for alterado. Por exemplo, checkip.dyndns.com retorna algo como Endereço IP atual: ddd.ddd.ddd.ddd. Portanto, basta comparar a saída inteira.
Além disso, se você estiver usando curl, poderá ocultar o progresso usando o sinalizador -s. Como está escrito no stderr, ele não polui o stdout.
Então, aqui está um script .cmd simples, que usa curl para salvar a saída. Ele então usa FC para compará-lo com a saída anterior, se houver. Não preciso definir opções de FC para Unicode, distinção entre maiúsculas e minúsculas etc., pois a saída deve ser uma correspondência binária, quando o IP não foi alterado. O Unix tem cmp em vez de FC.
Obviamente, CurrentIp.txt LastIp.txt pode ser alterado para se adequar, por exemplo, prefixo com "% TMP% \" Este script deve funcionar no Agendador de tarefas, com pequenas alterações.
fonte
Em resposta ao OP: "Estou perdendo uma maneira simples e elegante de recuperar meu IP público e verificar se ele mudou?"
Uma resposta realmente simples é não. Atualize periodicamente seu IP.
Parece um desperdício, mas soluções "mais inteligentes" são apenas mais complexas e menos confiáveis, sem economizar CPU, largura de banda, etc. Enviar 1500 bytes ou menos (um pacote) uma vez por hora é muito barato. Um ano inteiro consumirá 365 * 24 * 1.500 = 13 Meg Bytes ou cerca de 3 minutos do Rifleman na Netflix.
O custo de CPU / largura de banda de obter seu ip externo e ocasionalmente postar seu novo ip é provavelmente mais alto do que apenas postar redundantemente seu ip periodicamente. Venho postando meu ip para duckdns a cada hora há anos, sem problemas. Obviamente, se você começar a fazer isso por um segundo, seu serviço de domínio poderá descobrir e ficar irritado. Da mesma forma, qualquer serviço que você usar para procurar seu ip não ficará satisfeito se você fizer isso.
Um último pensamento, a pergunta que você faz é parte do problema que você mencionou. O gatilho para atualizar o seu DNS dinâmico pode ser quando o seu nome de domínio não for resolvido para o servidor. Você pode usar o ping, mas se o seu endereço IP antigo for reutilizado, o novo proprietário da concessão de IP poderá responder ao ping.
Com isso em mente, você pode tentar periodicamente fazer o download de um pequeno arquivo mágico / de assinatura do seu servidor. Realmente, pode ser qualquer arquivo estático que diz que você encontrou seu servidor, até sua página inicial funcionaria, mas um nome incomum seria muito melhor que o default.html.
Se o d / l falhar, atualize seu IP, limpe o cache do DNS e tente novamente. A atualização pode demorar alguns minutos, dependendo do seu serviço DNS. Essa abordagem elimina a dependência de outro site IP externo e testa o que você realmente deseja saber: outras pessoas podem acessar meu site?
fonte
Como uma opção alternativa que pode ajudá-lo, escrevi um script python projetado para monitorar alterações externas no endereço IP. Eu o uso no Linux, mas como é python, ele deve funcionar no Windows muito bem depois de configurar o ambiente Python apropriado. Atualmente, ele salva o endereço IP externo "atual" em um arquivo e, quando executado, pega um novo endereço IP e o verifica em relação ao antigo. Foi projetado para enviar um e-mail a você, se uma alteração for detectada.
Ele foi projetado para ser executado como cronjob (Linux) ou tarefa agendada (Windows) e não é executado como um daemon em segundo plano por si só.
Aqui está o link para o repositório do github: https://github.com/begleysm/ipwatch
Espero que ajude!
fonte
Eu uso
curl ifconfig.me
, mas não é algo que tentei em plataformas diferentes da Debian.fonte