I recently discovered a way of watching network connections in Windows in realtime without using a program like Active Ports. Simply run this command:
netstat -o 1
Check out netstat /? for more options, but this will show and update network connections from the local machine every second.
TO make this a bit more useful, use:
netstat -o 1 find "3389" - I use this example to show only connections using the Remote Desktop Protocol.
Useful to use with a server where 3rd party applications cannot be installed.
Tuesday, March 20, 2007
Friday, March 16, 2007
Restoring an MSSQL 2000 Database and Creating Correct Logons
If you want to migrate/copy an SQL Server database and login/secrutiy infromation then this script is for you...
I was passed on this script that creates a stored procedure on the source sql server and then after being run in Query Analyzer, creates an SQL script to run on the destination server creating appropriate logons and secrurity after restoring/migrating a database to a different server. Note - if moving/restoring a database to another sql server, restore the database first, then run this script. The script itself is as follows:
USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
@binvalue varbinary(256),
@hexvalue varchar(256) OUTPUT
AS
DECLARE @charvalue varchar(256)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
SELECT @firstint = FLOOR(@tempint/16)
SELECT @secondint = @tempint - (@firstint*16)
SELECT @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
SELECT @i = @i + 1
END
SELECT @hexvalue = @charvalue
GO
IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @xstatus int
DECLARE @binpwd varbinary (256)
DECLARE @txtpwd sysname
DECLARE @tmpstr varchar (256)
DECLARE @SID_varbinary varbinary(85)
DECLARE @SID_string varchar(256)
IF (@login_name IS NULL)
DECLARE login_curs CURSOR FOR
SELECT sid, name, xstatus, password FROM master..sysxlogins
WHERE srvid IS NULL AND name <> 'sa'
ELSE
DECLARE login_curs CURSOR FOR
SELECT sid, name, xstatus, password FROM master..sysxlogins
WHERE srvid IS NULL AND name = @login_name
OPEN login_curs
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
IF (@@fetch_status = -1)
BEGIN
PRINT 'No login(s) found.'
CLOSE login_curs
DEALLOCATE login_curs
RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated '
+ CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
PRINT 'DECLARE @pwd sysname'
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
PRINT ''
SET @tmpstr = '-- Login: ' + @name
PRINT @tmpstr
IF (@xstatus & 4) = 4
BEGIN -- NT authenticated account/group
IF (@xstatus & 1) = 1
BEGIN -- NT login is denied access
SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''
PRINT @tmpstr
END
ELSE BEGIN -- NT login has access
SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''
PRINT @tmpstr
END
END
ELSE BEGIN -- SQL Server authentication
IF (@binpwd IS NOT NULL)
BEGIN -- Non-null password
EXEC sp_hexadecimal @binpwd, @txtpwd OUT
IF (@xstatus & 2048) = 2048
SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'
ELSE
SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'
PRINT @tmpstr
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
+ ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '
END
ELSE BEGIN
-- Null password
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
+ ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '
END
IF (@xstatus & 2048) = 2048
-- login upgraded from 6.5
SET @tmpstr = @tmpstr + '''skip_encryption_old'''
ELSE
SET @tmpstr = @tmpstr + '''skip_encryption'''
PRINT @tmpstr
END
END
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO
Save as sp_help_revlogin.sql.
As said before, run this firstly on the source sql server in Query Analyzer. This won't show anything outputted to the screen, but will create a stored procedure which can be run by typing: sp_help_revlogin and hitting execute. This will output some sql. Copy and past this sql into the Query Analyzer on the destination server and execute. This will create all logins and appropriate permissions on the destination server.
I was passed on this script that creates a stored procedure on the source sql server and then after being run in Query Analyzer, creates an SQL script to run on the destination server creating appropriate logons and secrurity after restoring/migrating a database to a different server. Note - if moving/restoring a database to another sql server, restore the database first, then run this script. The script itself is as follows:
USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
@binvalue varbinary(256),
@hexvalue varchar(256) OUTPUT
AS
DECLARE @charvalue varchar(256)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
SELECT @firstint = FLOOR(@tempint/16)
SELECT @secondint = @tempint - (@firstint*16)
SELECT @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
SELECT @i = @i + 1
END
SELECT @hexvalue = @charvalue
GO
IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @xstatus int
DECLARE @binpwd varbinary (256)
DECLARE @txtpwd sysname
DECLARE @tmpstr varchar (256)
DECLARE @SID_varbinary varbinary(85)
DECLARE @SID_string varchar(256)
IF (@login_name IS NULL)
DECLARE login_curs CURSOR FOR
SELECT sid, name, xstatus, password FROM master..sysxlogins
WHERE srvid IS NULL AND name <> 'sa'
ELSE
DECLARE login_curs CURSOR FOR
SELECT sid, name, xstatus, password FROM master..sysxlogins
WHERE srvid IS NULL AND name = @login_name
OPEN login_curs
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
IF (@@fetch_status = -1)
BEGIN
PRINT 'No login(s) found.'
CLOSE login_curs
DEALLOCATE login_curs
RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated '
+ CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
PRINT 'DECLARE @pwd sysname'
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
PRINT ''
SET @tmpstr = '-- Login: ' + @name
PRINT @tmpstr
IF (@xstatus & 4) = 4
BEGIN -- NT authenticated account/group
IF (@xstatus & 1) = 1
BEGIN -- NT login is denied access
SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''
PRINT @tmpstr
END
ELSE BEGIN -- NT login has access
SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''
PRINT @tmpstr
END
END
ELSE BEGIN -- SQL Server authentication
IF (@binpwd IS NOT NULL)
BEGIN -- Non-null password
EXEC sp_hexadecimal @binpwd, @txtpwd OUT
IF (@xstatus & 2048) = 2048
SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'
ELSE
SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'
PRINT @tmpstr
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
+ ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '
END
ELSE BEGIN
-- Null password
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
+ ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '
END
IF (@xstatus & 2048) = 2048
-- login upgraded from 6.5
SET @tmpstr = @tmpstr + '''skip_encryption_old'''
ELSE
SET @tmpstr = @tmpstr + '''skip_encryption'''
PRINT @tmpstr
END
END
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO
Save as sp_help_revlogin.sql.
As said before, run this firstly on the source sql server in Query Analyzer. This won't show anything outputted to the screen, but will create a stored procedure which can be run by typing: sp_help_revlogin and hitting execute. This will output some sql. Copy and past this sql into the Query Analyzer on the destination server and execute. This will create all logins and appropriate permissions on the destination server.
Friday, February 23, 2007
Stop and Start Specific Websites
Ran into this really useful bit of VBS to stop or start specific websites in IIS:
To Stop (StopSite1.vbs):
Set IISObj=GetObject("IIS://LocalHost/W3SVC/1")
IISObj.Stop
To Start (StartSite1.vbs):
Set IISObj=GetObject("IIS://LocalHost/W3SVC/1")
IISObj.Start
Just copy the lines into a text file, rename to .vbs and run with: cscript StartSite1.vbs or cscript StopSite1.vbs.
To Stop (StopSite1.vbs):
Set IISObj=GetObject("IIS://LocalHost/W3SVC/1")
IISObj.Stop
To Start (StartSite1.vbs):
Set IISObj=GetObject("IIS://LocalHost/W3SVC/1")
IISObj.Start
Just copy the lines into a text file, rename to .vbs and run with: cscript StartSite1.vbs or cscript StopSite1.vbs.
Errorlevels and Windows XP
I was recently playing with a script to do some basica automated failover depending on whether a certain service was running or not and came accross an interesting fact that Windows XP and I think any newer Windows OS younger than Windows 98 doesn't see Errorlevel =0 as success, instead the successful errorlevel is 255.
For instance - to check the Messenger service on a remote computer (you obviously need the correct rights on the remote machine);
sc \\ query Messenger | FIND "STATE" > service_state.txt
type service_state.txt | find "4"
IF ERRORLEVEL 255 GOTO Running
IF ERRORLEVEL 1 GOTO Problem
:Running
echo Service is running
goto end
:Problem
echo Service Problem
goto End
:End
exit
Thought this may be worth posting if someone's having a hard time with errorlevels!
For instance - to check the Messenger service on a remote computer (you obviously need the correct rights on the remote machine);
sc \\
type service_state.txt | find "4"
IF ERRORLEVEL 255 GOTO Running
IF ERRORLEVEL 1 GOTO Problem
:Running
echo Service is running
goto end
:Problem
echo Service Problem
goto End
:End
exit
Thought this may be worth posting if someone's having a hard time with errorlevels!
Monday, February 19, 2007
RPC over HTTPS Problems
I had a problem that I just couldn't solve - check out my google group post:
I'm absolutely stuck. I've been through almost every knowledgebase
article i've found and along the way fixed every error i've come
across (which has pretty much been all of them). I've got a single
exchange server enabled for RPC over HTTPS. I've got a self signed ssl
certificate created via the IIS resource kit using Self SSL which I
have trusted and is called the same as my external url to my owa
server.
I can navigate to owa without getting prompted with certificate
information, and I can go to http:///rpc where i get prompted for
username and password which fails after third attempt where i get an
error: HTTP Error 401.3 - Unauthorized: Access is denied due to an ACL
set on the requested resource.
I've read that even though this error isn't the standard error i
should get, it should not prove to be a problem. I've done an rpc ping
with the following commands:
rpcping -t ncacn_http -s exch_server_name -o RpcProxy=external_url -P
"user,domain,*" -I "user,domain,*" -H 1 -u 10 -a connect -F 3 -v 3 -E -
R none
rpcping -t ncacn_http -s exch_server_name -o RpcProxy=external_url -P
"user,domain,*" -I "user,domain,*" -H 1 -F 3 -a connect -u 10 -v 3 -e
6002
rpcping -t ncacn_http -s exch_server_name -o RpcProxy=external_url -P
"user,domain,*" -I "user,domain,*" -H 1 -F 3 -a connect -u 10 -v 3 -e
6001
rpcping -t ncacn_http -s exch_server_name -o RpcProxy=external_url -P
"user,domain,*" -I "user,domain,*" -H 1 -F 3 -a connect -u 10 -v 3 -e
6004
all come back fine. When connecting i can see Outlook trying to
connect via port 443 (using Active Ports) but nothing at all happens.
When i run outlook /rpcdiag all i see is it trying to connect, but
nothing else.
The server setup is:
1 x Windows 2003 SBS Server - does have exchange 2003 sp2, but is not
running any part of Rpc over HTTPS - we are slowly decomissioning it.
- DC and GC
1 x Windows 2003 R2 Server - Exchange 2003 SP2 - Rpc over HTTPs server
1 x Windows 2003 x64 Server - DC and GC
<
If you get this far and everything is fine, one thing I didn't check were the firewall rules on the client PC. The firewall was allowing connections out from Outlook, but not back in!!! Such a schoolboy thing to do, but didn't believe it. I was using Kerio firewall, but it just wasn't warning me about incoming connections!!!! Frustrating!!!
Also - if using SelfSSL as with the IIS6 Resource Kit, bear in mind teh default certificate is only for 7 days. You can increase this with the /V switch. Check ou tthis site for a great tutorial:
http://www.visualwin.com/SelfSSL/
I'm absolutely stuck. I've been through almost every knowledgebase
article i've found and along the way fixed every error i've come
across (which has pretty much been all of them). I've got a single
exchange server enabled for RPC over HTTPS. I've got a self signed ssl
certificate created via the IIS resource kit using Self SSL which I
have trusted and is called the same as my external url to my owa
server.
I can navigate to owa without getting prompted with certificate
information, and I can go to http://
username and password which fails after third attempt where i get an
error: HTTP Error 401.3 - Unauthorized: Access is denied due to an ACL
set on the requested resource.
I've read that even though this error isn't the standard error i
should get, it should not prove to be a problem. I've done an rpc ping
with the following commands:
rpcping -t ncacn_http -s exch_server_name -o RpcProxy=external_url -P
"user,domain,*" -I "user,domain,*" -H 1 -u 10 -a connect -F 3 -v 3 -E -
R none
rpcping -t ncacn_http -s exch_server_name -o RpcProxy=external_url -P
"user,domain,*" -I "user,domain,*" -H 1 -F 3 -a connect -u 10 -v 3 -e
6002
rpcping -t ncacn_http -s exch_server_name -o RpcProxy=external_url -P
"user,domain,*" -I "user,domain,*" -H 1 -F 3 -a connect -u 10 -v 3 -e
6001
rpcping -t ncacn_http -s exch_server_name -o RpcProxy=external_url -P
"user,domain,*" -I "user,domain,*" -H 1 -F 3 -a connect -u 10 -v 3 -e
6004
all come back fine. When connecting i can see Outlook trying to
connect via port 443 (using Active Ports) but nothing at all happens.
When i run outlook /rpcdiag all i see is it trying to connect, but
nothing else.
The server setup is:
1 x Windows 2003 SBS Server - does have exchange 2003 sp2, but is not
running any part of Rpc over HTTPS - we are slowly decomissioning it.
- DC and GC
1 x Windows 2003 R2 Server - Exchange 2003 SP2 - Rpc over HTTPs server
1 x Windows 2003 x64 Server - DC and GC
<
If you get this far and everything is fine, one thing I didn't check were the firewall rules on the client PC. The firewall was allowing connections out from Outlook, but not back in!!! Such a schoolboy thing to do, but didn't believe it. I was using Kerio firewall, but it just wasn't warning me about incoming connections!!!! Frustrating!!!
Also - if using SelfSSL as with the IIS6 Resource Kit, bear in mind teh default certificate is only for 7 days. You can increase this with the /V switch. Check ou tthis site for a great tutorial:
http://www.visualwin.com/SelfSSL/
Word 2003 Not spell Checking
I got this from:
http://domino.lancs.ac.uk/pub/usghelpdesk.nsf/0/DF1B055703F6261A80256F8F0045EA6C?OpenDocument
>Text Does Not Spell Check - Word 2003
(and possibly Xp Word 2002, 2000, 97)
If the spell checker passes over areas of text and does not pick-up mis-spelt
words it is possible that the text has been marked not to be checked.
To solve this problem do the following:
1. highlight the area which won't spell check.
2. click 'Tools' menu then the 'Language' option, then 'Set Language' option.
3. ensure that 'Do not check spelling or grammar' option is NOT selected.
4. click
The Spell Check should check the area now.
<
With me the case was that this option was selected, but Word was still not spell checking. To solve this, check the 'Do not check spelling or grammar' box, hit ok, and then do the same again and uncheck the box. All fixed.
http://domino.lancs.ac.uk/pub/usghelpdesk.nsf/0/DF1B055703F6261A80256F8F0045EA6C?OpenDocument
>Text Does Not Spell Check - Word 2003
(and possibly Xp Word 2002, 2000, 97)
If the spell checker passes over areas of text and does not pick-up mis-spelt
words it is possible that the text has been marked not to be checked.
To solve this problem do the following:
1. highlight the area which won't spell check.
2. click 'Tools' menu then the 'Language' option, then 'Set Language' option.
3. ensure that 'Do not check spelling or grammar' option is NOT selected.
4. click
The Spell Check should check the area now.
<
With me the case was that this option was selected, but Word was still not spell checking. To solve this, check the 'Do not check spelling or grammar' box, hit ok, and then do the same again and uncheck the box. All fixed.
Friday, January 26, 2007
Windows 2003 Black Screen Blinking Cursor at Boot
I recently had a software mirrored (RAID 1) hard disk fail on a server. On reboot I assumed everything would be ok as windows writes the correct path in the boot.ini to the second hard disk. Unfortuantely when i rebooted, all i was left with was a black screen at the point where Windows 2003 would normally kick in, with a flashing cursor and no error messages.
I checked the boot.ini via the recovery console, also ran fixboot but no luck. Anyway, after reading up on fixmbr, and ignoring the warning it gives, the server booted up off the second drive fine.
I checked the boot.ini via the recovery console, also ran fixboot but no luck. Anyway, after reading up on fixmbr, and ignoring the warning it gives, the server booted up off the second drive fine.
Subscribe to:
Posts (Atom)