Nov 19
因為 DHCP server 是用 Win2003 Server,然後也沒有將 MAC 卡號和 IP 綁在一起,所以想要用程式來得知上網電腦的名稱、IP 和網路卡號(另一個原因就是我沒有權限進去 DHCP server @@")並定期更新來確認使用者,這樣也比較好管理。
- PHP:
- Java Script:
因為是在 Server 上執行,所以只能取得 IP,MAC 卡號需要中間沒有 Layer-2 Switch 才不會變更卡號(藉由 Server 與 Client 之間的 arp),至於電腦名稱就要不到了。
不過需要用到 ActiveX,這樣每次更新的時候,還要終端使用者來允許 ActiveX 執行,所以不能在 FireFox 執行,也一樣找不到抓取電腦名稱的方法。
所以後來就只能在 Client 端執行,執行後將資料用 socket 傳上 Server。因為我只比較熟悉 PHP 語法,所以就寫了個 PHP 來抓取所需的資料;不過,如果使用者權限不足,沒辦法用 nbtstat 來抓取電腦的工作群組。
寫好的程式,可以用 Bambalam PHP EXE Compiler 來把它變成 EXE 檔。
Client 執行程式:
<?
$output1 = shell_exec('ipconfig /all');
$time = date('Y-m-d H:i:s');
// 抓 電腦名稱、IP、MAC 卡號
if (ereg (".*Host.*:.([a-zA-Z0-9_]*).*Pri.*Phy.*:.(.{17}).*Dhcp.*IP.*:.(192.*[0-9]).*Sub.*254", $output1, $regs)) {
$output2 = shell_exec('nbtstat -A '.$regs[3]);
// 抓 網路芳鄰的工作群組(便於辨別電腦)
if (ereg ($regs[3].".*Registered.*[[:space:]]+([a-zA-Z0-9_]+)[[:space:]]+<00>", $output2, $group)) {
$name = $regs[1]." @ ".$group[1];
}
else {
$name = $regs[1];
}
// 將結果傳送到網頁
$fp = fsockopen("192.168.51.34", 80, $errno, $errstr, 30);
if (!$fp) {
echo "connection failed.<br>";
} else {
$post_data = "date=".urlencode($time)."&ip=".urlencode($regs[3])."&mac=".urlencode($regs[2])."&name=".urlencode($name);
$ver = " HTTP/1.1";
$talk = "GET /ip/added.php?";
$talk .= ($post_data);
$talk .= ($ver)."\r\n";
$talk .= "HOST:192.168.51.34\r\n";
$talk .= "Keep-Alive:300\r\n";
$talk .= "Content-Type:application/x-www-form-urlencoded\r\n";
$talk.= "Content-length: " . strlen($post_data) . "\r\n";
$talk.= "\r\n";
fwrite($fp, $talk);
fclose($fp);
}
}
else {
echo "Fail!!";
}
?>
收集結果的網頁:
<html xmlns="http://www.w3.org/1999/xhtml"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>IP Table - Add</title> <link href="j_style/style.css" rel="stylesheet" type="text/css" /> </head> <body> <?php include("connect.php"); $date = $_GET['date']; $ip = $_GET['ip']; $mac = $_GET['mac']; $name = $_GET['name'];$query = "INSERT INTO ip (id, date, ip, mac, name) VALUES ('', '$date', '$ip', '$mac', '$name')";$results = mysql_query($query) or die ("Could not execute query : $query." . mysql_error());if ($results) { echo "<h2>Details added.</h2>"; echo "<br />"; echo "<a href='index.php'>Back to List</a><br />"; echo "<span id='second'>5 </span>秒後自動回到首頁"; } mysql_close(); ?><script type="text/javascript"> setTimeout("countdown()", 1000); function countdown() { var s = document.getElementById("second"); s.innerHTML = s.innerHTML - 1; if (s.innerHTML == 0) window.location = "index.php"; else setTimeout("countdown()", 1000); } </script> </body></html>
後來剩下的就是把執行的程式散佈到要收集資料的電腦,後來再找方法讓他可以自動進入排程執行(已經越來越像木馬了...XD)。
加入這篇文章到書籤網站或寄給朋友分享
http://article.denniswave.com/6426/trackback



相關文章






2009-11-23 at 10:04:57
[XP] 用命令列新增排定工作...
因為寫了一篇自動取得 IP、MAC、電腦名稱的程式,後來就是要讓電腦每週執行,所以需要加到排定的工作。想當然~一定要用命令列來加入比較好散佈到各台電腦。
還有就是正常執行會出現命令提示字元的視窗,這邊有人試出來可以讓他不出現(就是執行身份改成:"NT AUTHORITY\SYSTEM")
所以要讓每個星期一、四每天中午 12:10 執行 C:\IP.exe 的話,就這樣寫就可以了:
schtasks /Create /RU "NT AUTHORITY\SYSTEM" /SC WEE...