2017-10-12 201 views
0

好吧,让我们精确一点。多年来,我一直在问自己一个问题:是否有可能在计算机上侦听DNS请求(在我的情况下是windows计算机)并要求程序在检测到特殊DNS时执行shell命令?用Java持续监听DNS请求并执行cmd命令

我一直在玩这个命令:

IPCONFIG/displaydns |找到“my.dns.com”

和预期的一样,我可以在我的DNS缓存中找到“my.dns.com”。

我不能问到CMD:

嘿,听着在连续的所有请求,当你发现 “my.dns.com”请执行“的音乐。可执行程序”。

所以我想到一个程序(在Java中),这样做是为了我。为什么是java?因为我不能使用唯一的编程语言,所以我开始使用它,所以我更容易理解它。但是如果我正在寻找的东西在Java中是不可能的,请让我知道!

但是(再次)我不知道如何管理DNS请求,也没有要求Java程序连续运行。对于这里的那一刻就是一切,我可以添加到我的程序:

if ("my.dns.com" is detected) { 
try { 
String command = "cmd /c start music.exe"; 
Process child = Runtime.getRuntime().exec(command); 
OutputStream out = child.getOutputStream(); 
} catch (IOException e) { 
} 

也许在连续运行:

boolean running = true; 
while(running) 
{ 
    //main loop... 
} 

我知道,那是极少数,但我甚至不知道在哪里看看回答我的问题。

如果你能够理解我(是的,你在屏幕后面吃着多力多滋),你能至少帮我找到我的路吗?

精确的,如果你要我编辑:)

回答

0

也许PowerShell中的这种(未经测试)的片段将让你去。我不知道清除DNS缓存是个好主意,但这取决于您。如果你不这样做,它仍然会在那里。

while ($true) { 
    $a = Get-DnsClientCache | ForEach-Object { $_.Name } 
    if ($a -contains 'the.dns.com') { 
     Start-Process C:\path\to\music.exe -Wait 
     Clear-DnsClientCache 
    } 
} 
+0

所以,我一定尝试这个剧本,并遗憾地说,但,它不工作:(脚本执行很好,但什么都没有发生,当我旅行到特定的DNS。至少,您的帮助感谢:) @lit –

+0

请尝试运行'Get-DnsClientCache | ForEach-Object {$ _。Name}'在PowerShell提示符下单独运行。您在输出中查找的域名是?另外,您必须在浏览到相关域时保持此脚本运行。 – lit

+0

所以我尝试了一下,它的确显示了我很少的DNS,但并不是我想要的那个:(但是,当我把一个DNS放在列表中时,它就起作用了。顺便说一句,谢谢@lit) –