phirebird

Adding new / Changing existing email domains in Microsoft Exchange

If this isn’t a once-in-a-blue-moon task that needs mentioning – I don’t know what is! How often do you get a new domain or rebrand your company? After Finance have done their bit and Marketing have diddled around with PR mumbo jumbo, the real work down in the IT department is to tell your Exchange server to start accepting email for a new domain. Well, it’s quite simple:

  1. Open Exchange Sytem Manager
  2. Goto Recipients -> Recipient Policies
  3. Right-click / Properties on your default policy
  4. Look under the “E-Mail Addresses (Policy)” tab

In here, you’ll have a list of domains that your exchange box accepts and sends email for. The SMTP entry in bold is your primary domain. From here, you can either editing an existing domain – or create a new SMTP ‘address’. Be aware that setting a new domain to primary (especially in large organisations) will take some time! (as it’s got to go through every AD account and set the primary domain)

 

Did you find this hint useful? Are you looking to learn more about Exchange? Well, here’s a few books that I’ve found useful – have a goosie!


Microsoft Exchange Server 2003 Training kit
 
Mastering Microsoft Exchange Server 2003
 
Configuring Microsoft Exchange Server 2007 Training Kit
 
Microsoft Exchange Server 2007 for Dummies

 

 

Map drives based on user’s AD group membership using IFMEMBER

Login scripts are very handy – but when it comes to mapping drives (or processing other commands) based on the users active directory group membership – it can be a bit of a pain.

Thats where Ifmember.exe (part of the Windows Server 2003 Resource Kit) comes in.

You can get this to work for you in one of two ways. The first is to have it call it from within your login script and then evaluate the errorlevel (Errorlevel 1 if they are a member or 0 if not) – which is multiline and not very tidy. The other option is to use conditional execution (executes additional commands depending on which errorlevel the command returns).

Perhaps the best way to explain this is through a few examples:

ifmember Finance || net use f: \\server\finance

Assuming that the current user *is* a member of the ‘Finance’ group – it will map drive F. Similarly, you can use && instead to process commands if the user is *NOT* a member of Finance:

ifmember Finance && net use f: \\server\someothershare

Of course, these examples both assume that ifmember.exe is in the local machines search path (or it’s being called from the same directory as the script). Another option is that you could call it through a UNC path:

\\server\tools\ifmember.exe Finance || net use f: \\server\finance

 Which works quite well!

You can obtain ifmember.exe either as part of the Windows 2003 Server Resource Kit Tools from Microsoft here (which is well worth doing!):

http://www.microsoft.com/Downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en

Or you can get just the file itself from:

http://www.microsoft.com/downloads/details.aspx?FamilyID=07C2F6D7-815E-4FA0-9043-4E4635CCD417&displaylang=en

 

Did you find this hint useful? Are you looking to learn more? Well, here’s a few books that I’ve found useful – have a goosie!


Active Directory for Dummies
 
Microsoft Windows Shell Script Programming
 
Microsoft Windows Script Host
 
Mastering Windows Server 2003

 

 

Configure Outlook Exchange email account through login script

This one’s a common issue – you’ve got hundreds of users and want an efficient way of handing out Exchange email account settings to all of your Outlook users. Well, I’m going to cut through all the waffle and tell you the method I use.

I create a .prf file (Outlook Profile), store it in a shared server location, and reference it from within a login script. The problem is, I only want it to run once (when a user logs into a machine for the first time). So I check for the existence of a junk file in the users profile directory (C:\Doc & Set\user\outlookdone.dat – which incidentally also contains the date it was originally done). The resulting login batch file looks a bit like this:

if exist “%USERPROFILE%\outlookdone.dat” goto outlookdone
echo Configuring Outlook EMail profile..
“c:\Program Files\Microsoft Office\OFFICE11\OUTLOOK.EXE” /importprf \\server\share\outlook.prf
echo %date% >”%USERPROFILE%\outlookdone.dat”

: outlookdone

(NB: that this is for Outlook 2003 – OFFICE11. This method should also work for 2002 and 2007 – however it has not been tested). Finally, the all important .prf file looks a bit like this:

[General]
Custom=1
ProfileName=Default profile
DefaultProfile=Yes
OverwriteProfile=No
ModifyDefaultProfileIfPresent=FALSE

[Service List]
;ServiceX=Microsoft Outlook Client
ServiceEGS=Exchange Global Section
Service1=Microsoft Exchange Server
ServiceEGS=Exchange Global Section

[ServiceEGS]
MailboxName=%UserName%
HomeServer=YOUREXCHANGESERVERNAMEGOESHERE
[Service1]
OverwriteExistingService=No
UniqueService=Yes
MailboxName=%UserName%
HomeServer=YOUREXCHANGESERVERNAMEGOESHERE
AccountName=Microsoft Exchange Server

[Microsoft Exchange Server]
ServiceName=MSEMS
MDBGUID=5494A1C0297F101BA58708002B2A2517
MailboxName=PT_STRING8,0×6607
HomeServer=PT_STRING8,0×6608
OfflineAddressBookPath=PT_STRING8,0x660E
OfflineFolderPath=PT_STRING8,0×6610

[Exchange Global Section]
SectionGUID=13dbb0c8aa05101a9bb000aa002fc45a
MailboxName=PT_STRING8,0×6607
HomeServer=PT_STRING8,0×6608
RPCoverHTTPflags=PT_LONG,0×6623
RPCProxyServer=PT_UNICODE,0×6622
RPCProxyPrincipalName=PT_UNICODE,0×6625
RPCProxyAuthScheme=PT_LONG,0×6627
CachedExchangeConfigFlags=PT_LONG,0×6629

[Microsoft Mail]
ServiceName=MSFS
ServerPath=PT_STRING8,0×6600
Mailbox=PT_STRING8,0×6601
Password=PT_STRING8,0x67f0
RememberPassword=PT_BOOLEAN,0×6606
ConnectionType=PT_LONG,0×6603
UseSessionLog=PT_BOOLEAN,0×6604
SessionLogPath=PT_STRING8,0×6605
EnableUpload=PT_BOOLEAN,0×6620
EnableDownload=PT_BOOLEAN,0×6621
UploadMask=PT_LONG,0×6622
NetBiosNotification=PT_BOOLEAN,0×6623
NewMailPollInterval=PT_STRING8,0×6624
DisplayGalOnly=PT_BOOLEAN,0×6625
UseHeadersOnLAN=PT_BOOLEAN,0×6630
UseLocalAdressBookOnLAN=PT_BOOLEAN,0×6631
UseExternalToHelpDeliverOnLAN=PT_BOOLEAN,0×6632
UseHeadersOnRAS=PT_BOOLEAN,0×6640
UseLocalAdressBookOnRAS=PT_BOOLEAN,0×6641
UseExternalToHelpDeliverOnRAS=PT_BOOLEAN,0×6639
ConnectOnStartup=PT_BOOLEAN,0×6642
DisconnectAfterRetrieveHeaders=PT_BOOLEAN,0×6643
DisconnectAfterRetrieveMail=PT_BOOLEAN,0×6644
DisconnectOnExit=PT_BOOLEAN,0×6645
DefaultDialupConnectionName=PT_STRING8,0×6646
DialupRetryCount=PT_STRING8,0×6648
DialupRetryDelay=PT_STRING8,0×6649

[Personal Folders]
ServiceName=MSPST MS
Name=PT_STRING8,0×3001
PathToPersonalFolders=PT_STRING8,0×6700
RememberPassword=PT_BOOLEAN,0×6701
EncryptionType=PT_LONG,0×6702
Password=PT_STRING8,0×6703

[Unicode Personal Folders]
ServiceName=MSUPST MS
Name=PT_UNICODE,0×3001
PathToPersonalFolders=PT_STRING8,0×6700
RememberPassword=PT_BOOLEAN,0×6701
EncryptionType=PT_LONG,0×6702
Password=PT_STRING8,0×6703

[Outlook Address Book]
ServiceName=CONTAB

[LDAP Directory]
ServiceName=EMABLT
ServerName=PT_STRING8,0×6600
UserName=PT_STRING8,0×6602
UseSSL=PT_BOOLEAN,0×6613
UseSPA=PT_BOOLEAN,0×6615
DisableVLV=PT_LONG,0×6616
DisplayName=PT_STRING8,0×3001
ConnectionPort=PT_STRING8,0×6601
SearchTimeout=PT_STRING8,0×6607
MaxEntriesReturned=PT_STRING8,0×6608
SearchBase=PT_STRING8,0×6603

[Microsoft Outlook Client]
SectionGUID=0a0d020000000000c000000000000046
FormDirectoryPage=PT_STRING8,0×0270
WebServicesLocation=PT_STRING8,0×0271
ComposeWithWebServices=PT_BOOLEAN,0×0272
PromptWhenUsingWebServices=PT_BOOLEAN,0×0273
OpenWithWebServices=PT_BOOLEAN,0×0274
CachedExchangeMode=PT_LONG,0x041f
CachedExchangeSlowDetect=PT_BOOLEAN,0×0420

[Personal Address Book]
ServiceName=MSPST AB
NameOfPAB=PT_STRING8,0x001e3001
Path=PT_STRING8,0x001e6600
ShowNamesBy=PT_LONG,0×00036601

; ************************************************************************
; Section 7 – Mapping for internet account properties.  DO NOT MODIFY.
; ************************************************************************

[I_Mail]
AccountType=POP3
;— POP3 Account Settings —
AccountName=PT_UNICODE,0×0002
DisplayName=PT_UNICODE,0x000B
EmailAddress=PT_UNICODE,0x000C
;— POP3 Account Settings —
POP3Server=PT_UNICODE,0×0100
POP3UserName=PT_UNICODE,0×0101
POP3UseSPA=PT_LONG,0×0108
Organization=PT_UNICODE,0×0107
ReplyEmailAddress=PT_UNICODE,0×0103
POP3Port=PT_LONG,0×0104
POP3UseSSL=PT_LONG,0×0105
; — SMTP Account Settings —
SMTPServer=PT_UNICODE,0×0200
SMTPUseAuth=PT_LONG,0×0203
SMTPAuthMethod=PT_LONG,0×0208
SMTPUserName=PT_UNICODE,0×0204
SMTPUseSPA=PT_LONG,0×0207
ConnectionType=PT_LONG,0x000F
ConnectionOID=PT_UNICODE,0×0010
SMTPPort=PT_LONG,0×0201
SMTPUseSSL=PT_LONG,0×0202
ServerTimeOut=PT_LONG,0×0209
LeaveOnServer=PT_LONG,0×1000

[IMAP_I_Mail]
AccountType=IMAP
;— IMAP Account Settings —
AccountName=PT_UNICODE,0×0002
DisplayName=PT_UNICODE,0x000B
EmailAddress=PT_UNICODE,0x000C
;— IMAP Account Settings —
IMAPServer=PT_UNICODE,0×0100
IMAPUserName=PT_UNICODE,0×0101
IMAPUseSPA=PT_LONG,0×0108
Organization=PT_UNICODE,0×0107
ReplyEmailAddress=PT_UNICODE,0×0103
IMAPPort=PT_LONG,0×0104
IMAPUseSSL=PT_LONG,0×0105
; — SMTP Account Settings —
SMTPServer=PT_UNICODE,0×0200
SMTPUseAuth=PT_LONG,0×0203
SMTPAuthMethod=PT_LONG,0×0208
SMTPUserName=PT_UNICODE,0×0204
SMTPUseSPA=PT_LONG,0×0207
ConnectionType=PT_LONG,0x000F
ConnectionOID=PT_UNICODE,0×0010
SMTPPort=PT_LONG,0×0201
SMTPUseSSL=PT_LONG,0×0202
ServerTimeOut=PT_LONG,0×0209
CheckNewImap=PT_LONG,0×1100
RootFolder=PT_UNICODE,0×1101

[INET_HTTP]
AccountType=HOTMAIL
Account=PT_UNICODE,0×0002
HttpServer=PT_UNICODE,0×0100
UserName=PT_UNICODE,0×0101
Organization=PT_UNICODE,0×0107
UseSPA=PT_LONG,0×0108
TimeOut=PT_LONG,0×0209
Reply=PT_UNICODE,0×0103
EmailAddress=PT_UNICODE,0x000C
FullName=PT_UNICODE,0x000B
Connection Type=PT_LONG,0x000F
ConnectOID=PT_UNICODE,0×0010

 

Did you find this hint useful? Are you looking to learn more? Well, here’s a few books that I’ve found useful – have a goosie!


Mastering Microsoft Exchange Server 2003
 
Microsoft Windows Shell Script Programming
 
Microsoft Windows Script Host
 
Active Directory for Dummies

 

 

Redirecting My Documents shell folder from a login script / commandline

I’ve always been a firm believer in Group Policy redirecting users’ My Documents folders for me – but there’s nothing like the reassurance of a good old batch file carrying this operation out for you.

So how do you do it? Well, the location of My Documents is stored in the registry (which is read by the explorer process when it’s spawned) and is located here:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Personal

As you would expect, editing this one value redirects My Docs. So, as part of your network login script, you can achive this automatically by adding in:

reg add “HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders” /v Personal /t REG_EXPAND_SZ /d \\server\%USERNAME% /f

…to redirect to your server using the username of the currently logged on user as the share name.

 

Did you find this hint useful? Are you looking to learn more? Well, here’s a few books that I’ve found useful – have a goosie!


Active Directory for Dummies
 
Microsoft Windows Shell Script Programming
 
Microsoft Windows Script Host
 
Mastering Windows Server 2003

 

 

Can’t remove IP NAT entries on Cisco router: %Static entry in use, cannot remove

While removing IP NAT entries on a busy Cisco router – you’ll probably end up with this problem:

phbrtr(config)#no ip nat source static tcp 192.168.0.1 25 interface FastEthernet1/0 25
%Static entry in use, cannot remove

phbrtr(config)#

So what it is? Well, as the errors suggests, the rule is currently being used and as such can’t be changed (in this particular instance, there were a few active SMTP connections). On busy routers, this activity sometimes cannot be helped!

So how do you get around it? Well the first way is simply to wait for a lul in the traffic! When this isn’t possible, you can try clearing current IP NAT dynamic translations: (NB: Be quick!)

phbrtr(config)#no ip nat source static tcp 192.168.0.1 25 interface FastEthernet1/0 25
%Static entry in use, cannot remove

phbrtr(config)#do clear ip nat translation *
phbrtr(config)#no ip nat source static tcp 192.168.0.4 25 interface FastEthernet1/0 25
phbrtr(config)#

If this still doesn’t work (note that once you’ve issued the clear ip nat command – any new packets will create a new nat entry – hence ‘Be quick’!), you will to stop nat for a while to allow you to remove the translation:

phbrtr(config)#no ip nat source static tcp 192.168.0.1 25 interface FastEthernet1/0 25
%Static entry in use, cannot remove

phbrtr(config)#interface FastEthernet0/0
phbrtr(config-if)#no ip nat inside
phbrtr(config-if)#exit

phbrtr(config)#interface FastEthernet1/0
phbrtr(config-if)#no ip nat outside
phbrtr(config-if)#exit

phbrtr(config)#do clear ip nat translation *
phbrtr(config)#no ip nat source static tcp 192.168.0.1 25 interface FastEthernet1/0 25

phbrtr(config)#interface FastEthernet0
phbrtr(config-if)#ip nat inside
phbrtr(config-if)#exit

phbrtr(config)#interface FastEthernet1/0
phbrtr(config-if)#ip nat outside
phbrtr(config-if)#exit

 This demo removes IP NAT from both inside and outside interfaces – but you could try to removing it from just one (for ease) - but it will obviously depend on your setup.

Are you looking to learn more about Cisco equipment? Well, here’s a selection of a few books that I’ve found useful over the years:


Cisco: A Beginner’s Guide
 
CCNA – Cisco Certified Network Associate Study Guide
 
Cisco Networking for Dummies
 
Cisco IOS in a Nutshell – O’Reilly

 

Windows 2008 Server ADPREP detected that the domain is not in native mode

I’ve done a few 2000 / 2003 domain migrations now to 2008 server – but recently hit across one where (when issuing adprep /domain prep) I got the error:

Adprep detected that the domain is not in native mode

Rather irritatingly, it doesn’t say how to put it into native mode – but it is a very simple operation:

On a domain controller, fire up Active Directory Domains and Trusts. Right-click on your domain and select Raise Domain Functional Level. From the drop-down list box, select Windows 2000 Native and click Raise.

You’ll get a message indicating that the functional level was raised successfully. As you’ve probably already clicked ‘OK’ – it also mentioned that it may take some time to replicate the change to other domain controllers. If ADPREP still complains – then you know why! Go make yourself a coffee!

 

Did you find this hint useful? Are you looking to learn more? Well, here’s a few books that I’ve found useful – have a goosie!


Windows Server 2008 Administrator’s Companion
 
Windows Server 2008 for Dummies
 
Introducing Windows Server 2008
 
Designing, Deploying, and Running Active Directory

 

 

How to disable Windows 2003 Server Shutdown Event Tracker

A rather irritating feature in 2003 (and 2008) server is the shutdown event tracker. For those not familiar with this – it’s a dialog box that appears when you try to shutdown Windows and won’t let you proceed until you give it a reason why you’re shutting it down!

Entering flippant remarks loses it’s novelty value after a while, so here is a quick how-to on disabling this feature. It does involve editing some group policies – which will depend on wheter you want to apply this to the machine or the entire domain.

First, fire up group policy editor and make this change to an existing or a new policy (make sure you apply the policy when you’re done!). If you want to apply this to the local machine (or one that isn’t part of a domain) – you can just do start/run and enter gpedit.msc

From the left-hand pane, navigate to (Policy root) – Computer Configuration – Administration Templates – System. Then double-click ‘Display Shutdown Event Tracker’ on the right-hand pane to display it’s properties. Set this to ‘Disabled’ and click OK.

You’re finished! Don’t forget, if you made the change to a domain policy – don’t forget to apply it to something!

Did you find this hint useful? Are you looking to learn more? Well, here’s a hand-picked selection of a few books that I’ve found useful over the years:


Windows Server 2003 for Dummies

Mastering Windows Server 2003

Introducing Windows Server 2008

Windows Server 2008 for Dummies

Sending Cisco logging messages to a buffer/syslog server. To console, or not to console – That is the question!

So you’ve configured up your Cisco box, enabled remote access and the serial console cable is long gone. But hey – what about all those potentially crucial console messages? Well, you’ ve got a few choices…

First is to leave it as it is - going off to a serial port – but add a permanent terminal to display the results. Not very practical – especially if the router is at a remote site.

Second option is to send the messages off to a syslog server – which is good if you’ve got routers spread all over and want to report back to a central point. Ok! Time to get yourself a syslog server up and running. If you’ve not already got it, Tftpd32 has funcitionality for this (which is also useful for the transfer of IOS images – more on this some other time maybe). You can get it from http://tftpd32.jounin.net. Configuring tftpd32 is beyond the scope of this guide – but it’s easy enough. Google it if in doubt. Enter global config mode on your router (conf t) and then:

phbrouter(config)# logging <ip address of syslog server>
phbrouter(config)# exit
phbrouter# wr mem

It’s that easy! Future messages will now be directed to your syslog server.

The third option is to get the router to store messages in a buffer for retrieval later. This is really useful to debug network failure at remote sites (say for instance your remote routers can’t report back to you whats going on - because its outside link is down! You’d wait for the line to come back up, log in and check what happened). Again, this is easy to configure. Enter global config mode and:

phbrouter# conf t
phbrouter(config)# logging buffered
phbrouter(config)# exit
phbrouter# wr mem
phbrouter#

And to retrieve the messages, issue:

phbrouter#
phbrouter#sh logging
Syslog logging: enabled (11 messages dropped, 1 messages rate-limited,
                0 flushes, 0 overruns, xml disabled, filtering disabled)
    Console logging: level debugging, 4873 messages logged, xml disabled,
                     filtering disabled
    Monitor logging: level debugging, 0 messages logged, xml disabled,
                     filtering disabled
    Buffer logging: level debugging, 3 messages logged, xml disabled,
                    filtering disabled
    Logging Exception size (4096 bytes)
    Count and timestamp logging messages: disabled

No active filter modules.

    Trap logging: level debugging, 4879 message lines logged
        Logging to 192.168.0.1(global) (udp port 514, audit disabled, link up), 4879 message lines logged, xml disabled,
               filtering disabled

Log Buffer (4096 bytes):

*Jun 10 18:01:01: %SYS-5-CONFIG_I: Configured from console by admin on vty0 (192.168.0.107)
*Jun 10 18:14:57: %SEC_LOGIN-5-LOGIN_SUCCESS: Login Success [user: admin] [Source: 192.168.0.107] [localport: 22] at 18:14:57 GMT Wed Jun 10 2009
*Jun 10 18:20:49: %SYS-5-CONFIG_I: Configured from console by admin on vty0 (192.168.0.107)

If you getting too much crap in the buffer, you can clear it by issuing the ‘clear logging’ command. Incidentally, you can set the amount of buffer space by tagging on a byte value at the end of ‘logging buffered’ (between 4096 to 2147483647).

Finally, if you’re sick of the logging messages appearing on the serial console (or if you want to hide the messages from prying eyes!) you can stop them by entering global config mode and issuing:

phbrouter(config)# no logging console

Are you looking to learn more about Cisco equipment? Well, here’s a selection of a few books that I’ve found useful over the years:


Cisco: A Beginner’s Guide
 
CCNA – Cisco Certified Network Associate Study Guide
 
Cisco Networking for Dummies
 
Cisco IOS in a Nutshell – O’Reilly

 

Configure a server behind a Cisco Router (port redirection)

This ‘how to’ isn’t going to go into the hows or why NAT / PAT works on the Cisco router – or in general for that matter. If you’re looking for that – Wikipedia has a good enough write up located here:

http://en.wikipedia.org/wiki/Network_address_translation 

What I am going to go into is how to configure them on your router. What we’re trying to achieve here is that you’ve got a functioning router and want to direct any incoming requests (SMTP, POP, HTTP – pick one!) to an internal server.

First identify which interface sits on the outside. Then enter global config mode, and issue:

ip nat inside source static tcp <internal ip> <internal port> interface <outside interface> <outside port>

So, for example, if you’re outside interface is FastEthernet1/0, and you wanted to redirect any HTTP requests to your internal web server on 192.168.0.10, you would issue:

phbrouter(config)# ip nat inside source static tcp 192.168.0.10 80 interface FastEthernet1/0 80

What if you’ve got multiple public IP’s? Simply use this instead:

phbrouter(config)# ip nat inside source static tcp 192.168.0.10 80 123.123.123.123 80

Easy, yet effective!

Are you looking to learn more about Cisco equipment? Well, here’s a selection of a few books that I’ve found useful over the years:


Cisco: A Beginner’s Guide
 
CCNA – Cisco Certified Network Associate Study Guide
 
Cisco Networking for Dummies
 
Cisco IOS in a Nutshell – O’Reilly

 

Hot Swapping / Removing Cisco 3660 Network Modules

I’ve got a Cisco 3660 that supports hot swapping of components: power supplies (yup – there’s two of them!), chassis fans – but also the network modules (NM-) too. So here’s something I’ve been wondering for a while – how to actually do this within the IOS! Not suprisingly, it’s easier than I thought! Just enter config mode, shutdown all the modules interfaces, remove the module and (optionally) replace the card and “no shutdown” each interface.

If you’re still reading, you want to know how to do it. Ok! First identify what module and so what interfaces you want to swap over (‘sh int’ or ‘sh diag’ will do). Say we want to swap over an NM-1FE1R2W in slot #3 with a WIC1-ADSL:

phbrouter# conf t
phbrouter(config)# interface FastEthernet3/0
phbrouter(config-if)# shutdown
phbrouter(config-if)# exit
phbrouter(config)# interface TokenRing3/0
phbrouter(config-if)# shutdown
phbrouter(config-if)# exit
phbrouter(config)# interface ATM3/0
phbrouter(config-if)# shutdown
phbrouter(config-if)# exit
phbrouter(config)# exit
phbrouter#

Next, physically remove the slot #3 module. If you’re on the console or have logging enabled, you should see something like:

* Jun  5 22:07:53: %OIR-6-REMCARD: Card removed from slot 3, interfaces disabled

You could stop here (make sure you install filler plate),  or you could replace it with a similar card and repeat the steps above substituting ‘shutdown’ for ‘no shutdown’

Done!!

Are you looking to learn more about Cisco equipment? Well, here’s a selection of a few books that I’ve found useful over the years:


Cisco: A Beginner’s Guide
 
CCNA – Cisco Certified Network Associate Study Guide
 
Cisco Networking for Dummies
 
Cisco IOS in a Nutshell – O’Reilly

 

« Previous PageNext Page »

phirebird