顯示具有 Windows 標籤的文章。 顯示所有文章
顯示具有 Windows 標籤的文章。 顯示所有文章

2014-07-24

Windows 2008 單一網卡架 VPN Server

因為偶而需要去大陸出差,需要一個跳板可以突破 GFW ,之前都是利用 SSH Tunnel ,不過在 ipad 上無法使用,因此找了台主機來架 VPN Server。網路上找到的範例教學大多是利用兩張網卡,研究了好久才知道 Windows 2008 是要怎樣設定,步驟如下:

  1. 新增路由及遠端存取
     
  2. 選擇自定設定
     
  3. 選取『VPN存取』及『NAT』
     
  4. 完成新增
     
  5. 設定  DHCP 發送位址範圍
  6. 設定 NAT,選取區域連線
  7. 選取『連線到網際網路的公用介面』及『在這個介面上啟用NAT』
     
  8. 完成後,即可利用 PPTP 的方式 VPN 連線到此台電腦,利用此電腦的網路上網了  

2009-09-22

批次檔設定 classpath

windows 的批次檔以利用 for 來對目錄中的檔案進行處理,但是 for 在取得環境變數只會在一開始取,因此,如果當我們將批次檔寫成:
set CLASSPATH=
for %i in (*) do set LIST=% CLASSPATH%;%i
echo % CLASSPATH%
並不會建立目前目錄中所有檔案的清單,相反的只會將 CLASSPATH 變數設為最後一個找到的檔案。因為 % CLASSPATH% 只有在 FOR 敘述第一次被讀入時才展開,此時 CLASSPATH 變數是空的。所以我們實際執行的 FOR 迴圈是:
for %i in (*) do set LIST= %i
可是當我照著微軟的說明,將 % 改為 ! ,還是得不到正確的結果:
set CLASSPATH =
for %i in (*) do set LIST=! CLASSPATH!;%i
echo % CLASSPATH%
這部份我還沒找到為什麼不行。後來,在網路上找了一下,發現只要呼叫外部的批次檔或是其它 label 就不會有問題了:
set CLASSPATH =
FOR /f %%I IN ('dir /b *.jar') DO call :cpappend %%I
echo %CLASSPATH%
goto end
:cpappend
set CLASSPATH=%CLASSPATH%;%1
:end

2009-06-25

Vista + IIS + Access 出現 80004005 錯誤

最近有個同事遇到一個問題,開發好的程式在 Vista 上的 IIS 會沒辦法讀取 access 裡面的資料,後來上網查了一下,發現這個問題還滿常發生的,要解決也很簡單,在命令模式下執行下面三行指令即可:
  • %windir%\system32\inetsrv\appcmd set config /section:applicationPools /[name='DefaultAppPool'].processModel.loadUserProfile:false
  • icacls %windir%\serviceprofiles\networkservice\AppData\Local\Temp /grant Users:(CI)(S,WD,AD,X)
  • icacls %windir%\serviceprofiles\networkservice\AppData\Local\Temp /grant "CREATOR OWNER":(OI)(CI)(IO
看起來因為 %windir%\serviceprofiles\networkservice\AppData\Local\Temp 這目錄的權限不足所造成的問題。
參考資料:

2009-06-08

運用 Windows Time 讓 Windows 進行時間同步

一般我們要進行時間的同步,可以使用 NTPClock 來進行同步。今天發現原來 Windows 有指令可以直接進行電腦時間的同步:
:: 設定要同步的 NTP Server
w32tm /config /update /manualpeerlist:ntp.ntu.edu.tw
:: 開始進行同步
w32tm /resync
如此一來,就不用再去特別下載 NTPClock 了。
註:
Windows Time 這個服務要開啟才能用
參考來源:

2009-04-09

運用 command 來批次改檔名

從網路上抓某些漫畫圖片回來,其裡面的命名會是 1.jpg, 2.jpg, 10.jpg, 11.jpg, 100.jpg... 等,使用看 Imagine 看時,看的順序會是 1, 10, 11, 12 ... 等,而不是真正想看到順序。最近剛好看到使用 awk sprintf 修改 檔案名稱,突然想到用在 Windows 環境下應該也是有處理的方式,找了一下 command 的寫法,可以用下面兩行指令來解決:
for /F %G in ('dir /b ?.jpg') do ren %G 00%G
for /F %G in ('dir /b ??.jpg') do ren %G 0%G
第一行是針對一位數的 jpg 檔前面補兩個 0。 第二行是針對二位數的 jpg 檔前面補一個 0。

2009-02-25

Windows 下的 su

最近因為用到 PostgreSQL ,而 PostgresSQL 有個限制,不能以【擁有系統管理者權限的使用者】來執行,因此在 Linux 下,就需要以 su 來改變身份去執行,那 windows 下要怎麼辦呢?小弟找到了兩個方法:
  1. sysinternals 裡的 psexec
  2. Windows 內建的 runas
小弟先在系統中建立了一個 postgres 的帳號,然後利用上述兩個軟體來執行。 使用 psexec 的方法如下: psexec -u postgres -p postgres D:\pgsql\bin\postgres -D D:\pgsql\data 使用 runas 的方法如下: %windir%\System32\runas.exe /user:ComputerName\postgres "D:\pgsql\bin\pg_ctl start -D D:\pgsql\data" 使用 psexec 的好處是,可以直接將密碼放在參數上,這樣不用每次都去 keyin 密碼。而使用 runas 的話,每次都要輸入密碼,另外也可以加上 /savecred 參數來存儲存密碼(XP Home 是不能用的)。

2009-02-22

好用工具:Junction ( Windows 版的 symbolic link )

Linux 上有個 ln 指令可任意建立 link ( 包括 hard links 與 symbolic links ),這是個很好用的東西,在 Vista 上也有個 mklink 可以用來做相同的事,不過在 Windows XP 之前的環境卻沒有內建相對應的程式,而 Junction 就是一個可以替代的工具。 其使用說明如下:
Junction v1.05 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2007 Mark Russinovich
Systems Internals - http://www.sysinternals.com

The first usage is for displaying reparse point information, and the
second usage is for creating or deleting a NTFS junction point:

usage: junction [-s] [-q] 
    -q     Don't print error messages (quiet)

    -s     Recurse subdirectories

usage: junction [-d]  []
    -d     Delete the specified junction
    example: junction d:\link c:\winnt
新增: junction c:\Profiles\User1\MyDocs "d:\tmp\My Documents" 刪除: junction -d c:\Profiles\User1\MyDocs 如果不是透田 junction 去刪除 link,而是直接用檔案總管去刪除 link,會造成原來的資料被一併刪除,請特別注意。 另外, 有個 NTFS Link ext 可以讓我們使用 GUI 的方式進行 link。 參考: http://amanda_hoic.mysinablog.com/index.php?op=ViewArticle&articleId=1276558

2009-02-03

SSH Tunnel

之前在客戶那,沒辦法使用 msn ,後來發現可以利用 ssh tunnel 來 proxy 連線。在 windows 平台下,我們可以使用 putty 或是 plink 來建立 ssh tunnel,因為這兩個都不支持密碼的在檔,所以我通常是使用 MyEnTunnel ,它是利用 plink 來進行連線,可以存下連線資料,方便我們進行連線。 那我們如何利用 MyEnTunnel 建立一個 socket proxy 呢?其使用部驟如下:
  1. 首先我們下載 MyEnTunnel 及 plink ,然後解壓縮放在一起:
  2. 執行 myentunnel.exe,設定連線資訊,記得勾選【Enable Dynamic SOCKS】:
  3. 點選 Connect,切換到 Status 頁即可看到是否連線成功
當線線成功後,我們就可以讓 firefox 或是 msn 利用此通道進行網頁的連線: Firefox:
  • 選擇【工具】=>【選項】
  • 點選【進階】=>【網路】=>【設定】 選擇【手動設定 Proxy】將最下面的【SOCKS 主機】設定到本機端的 7070 port(對應 MyEntunnel 上所設定的 port),然後我們就可以利用 firefox 連線到 http://myip.easylife.idv.tw/ 來驗證是否是透過 ssh server 連線了。
MSN:
  1. 【選項】=>【連線】=>【進階設定】
  2. 設定 SOCKS 為本機端及 Port 為 7070 按下測試:
  3. 如果 SOCKS 可連線,便可看到以下的訊息
參考: PuTTY自帶的plink.exe實現ssh繞牆技術 PuTTY - SSH Tunnel 運用備忘

2009-01-11

查看 port 被哪個程式占住了

一直以來,我都懶的去記 windows 的指令,而是使用 CurrPorts 這方便的工具來查,今天剛好在網路上看到記令,就把它記下來嚕,雖然比較麻煩,但是在沒有工具的情況下還是不錯用的:

netstat –ano a:表示列出所有連線中或 listening的連線。 n:表示使用數字形態列出,即 http 會以 80 顯示,ftp 會以 21 顯示。 o:則為列出該程式的 PID。

Noname

知道 PID 之後,接著就可以使用【工作管理員或是【tasklist】查看該 PID 是由哪一支程式所執行。

在 Linux 底下則是要用下面的指令:

netstat -tulnp

t:顯示 TCP u:顯示 UDP l:只顯示 listening 的 processes n:不要解析 IP address names 或 port numbers p:顯示 listening ports 的 process 名稱

也可以使用:

lsof -i

2008-12-22

如何利用批次檔取得系統日期時間

之前曾經有想過要利用批次檔加上 windows 的排程來定時為測試用的資料庫進行備份,只是不知道怎麼取得目前系統日期時間來使用,最近剛好看到這幾篇文章,留下來做參考:

取得今天日期的年、月、日:

for /f "tokens=1-4 delims=-/ " %%i IN ("%date%") DO (
    set year=%%i
    set month=%%j
    set day=%%k
)
取得當下時間的時、分、秒、百分之一秒
for /f "tokens=1-4 delims=:." %%i IN ("%time%") DO (
    set hour=%%i
    set minute=%%j
    set second=%%k
    set centisecond=%%l
)
組合含有日期、時間的字串:
SET OutputDir=%year%%month%%day%_%hour%_%minute%_%second%_%centisecond%
指令取得上個月的月份(使用 SET /A,/A 可以做數值運算(arithmetic)):
@echo off
rem 把日期裡的斜線拿掉;2008/10/21→20081021
set Today=%DATE:/=%
 
set ThisYear=%Today:~0,4%
 
rem 取回今天的年度月份;200810
set ThisMonth=%Today:~4,2%
 
rem 本月份減1取得上個月份
set /A LastMonth=%ThisMonth%-1
 
rem 如果是1月份的話,要把年度減1
if "%LastMonth%"=="0" set /A ThisYear=%ThisYear%-1
 
if "%LastMonth%"=="0" set LastMonth=12
 
rem 如果是1月到9月時,左補零成為01~09
if "%LastMonth:~1,1%"=="" set
LastMonth=0%LastMonth%
 
echo Year=%ThisYear%
echo Month=%LastMonth%

參考:

2008-12-16

Web Debugger

因為開發 Web application 的原故,常需要去監控 Http 連線內容, request 與 reponse,最早之前是使用海盜版的 HttpWatch,後來發現微軟有提供了一個地方產品:fiddler,也可以用來分析 http 封包。 這程式其實算是一個 http proxy ,當我們啟動後,他會監聽 8888 port 當 proxy ,並且自動把 windows 的 http 及 https 的 proxy 指到本機的 8888 port,因此它就可以監聽所有的 http request 及 response。有這這程式,我們就可以容易的為 ajax 的程式除錯,或是查看 http head 、request parameter、reponse content 的內容是不是正確。如果 Firefox 要透過它來進行除錯,就要手動設定 proxy 指到本機端的 8888 port 了。 另外,因為預設 localhost 是不透過 proxy 來進行連線的,因此再本機測試的時候,可以加個點來讓瀏灠器透過 proxy 連線,如: http://localhost.:8080/ 目前這類相關 http debug 的產品看到的有: IE base:
  1. IEInspector
  2. HttpWatch
Firefox base:
  1. Live HTTP Headers
  2. HTTPGuideDog
  3. HttpFox 與 httpwatch 相當類似,還滿好用的

2008-08-18

如何啟動 ACPI 來讓電腦自動關閉電源

最近在公司為了節能減炭,計畫將一些測試用的 Server 定時開關機來減少電力的損耗,而那些電腦裡,有幾台是 Windows 2000 server ,主機版也有支援 ACPI,不知道為什麼關機就是會出現【您可以安心關機了】的字眼而不會直接關機,這樣的 Server 造成需要有人去實際關機而不能排程關機(人是懶墮的,可以由電腦自己開關機就不要排值日生去關啊)。因此小弟就研究了一下,原來是 ACPI 的功能沒有被開啟,造成電腦不會自動關電源,只要照著以下步驟將 ACPI 的 Driver 改一下就行了(PS. 前提是主機版有支援 ACPI):
  1. 在【我的電腦】上按右鍵,選擇【管理】,點選【裝置管理員】,展開【電腦】,如果顯示如下【Advanced Configuration and Power Interface (ACPI)PC】表示已經開啟此功能,否則則繼續往下做。
  2. 在上面按右鍵,選【內容】,點選【驅動程式】
  3. 點選【更新驅動程式】,按下一步,選擇【請顯示這個裝置目前的驅動程式清單,讓我從清單中指定驅動程式(D)】
  4. 點選下一步,點選下面的【顯示這個裝置類別的所有硬體】,然後選擇 ACPI 的 driver。
  5. 點選下一步,安裝 Driver,重開機後就大功告成了

請注意,如果你的電腦沒有 Acpi 的功能,千萬不能裝這個 Driver,否則可能出問題。