<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CleverWorkarounds &#187; Cisco</title>
	<atom:link href="http://www.cleverworkarounds.com/category/infrastructure/networking/cisco/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cleverworkarounds.com</link>
	<description>After much frustration, it seems DEFAULT is the way to go...</description>
	<lastBuildDate>Thu, 02 Feb 2012 09:39:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Why do SharePoint Projects Fail &#8211; Part 3</title>
		<link>http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/</link>
		<comments>http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 12:19:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Documentum]]></category>
		<category><![CDATA[Finance]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[Wicked Problems]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/</guid>
		<description><![CDATA[This third post in the &#8220;Who do SharePoint Projects Fail&#8221; series has been hard to write, not because I am struggling with ideas, but because I have too many! It is hard to put all the reasons why SharePoint projects go wrong into a coherent chain of logic. In the first two posts in this [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript"><!--
google_ad_client = "pub-6551570212921028";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_ad_channel = "";
google_ui_features = "rc:6";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<p>This third post in the &#8220;Who do SharePoint Projects Fail&#8221; series has been hard to write, not because I am struggling with ideas, but because I have too many! It is hard to put all the reasons why SharePoint projects go wrong into a coherent chain of logic. </p>
<p>In the first two posts in this series, we did a basic examination of wicked problem theory. </p>
<p><a href="http://www.cleverworkarounds.com/2008/04/11/why-do-sharepoint-projects-fail-part-1/">Part 1</a> introduced you to tequila slammers, as well as the pioneering work by Horst Rittel and the concept of wicked problems.</p>
<p><a href="http://www.cleverworkarounds.com/2008/04/15/why-do-sharepoint-projects-fail-part-2/">Part 2</a> also delved into the murky depths of academic history to demonstrate that even back in the seventies when ABBA stole the hearts and minds of teenyboppers around the world, at least some people had time to look at wicked problems in relation to building IT systems. </p>
<p>If you take away anything from part 1 and 2, it is this. </p>
<ul>
<li>Too many tequila slammers hurt  </li>
<li>Before you blame the product, the project manager, the stakeholders, the nerds, the methodology or anything else in vicinity, go back to the problem you are solving and determine its &#8216;wickedness&#8217; </li>
</ul>
<p>Now we will finally look at this large, complex, scary beast known as SharePoint. I have no means to quantify how much of a percentage of project problems arise from issues related to &#8220;the product&#8221;, but it definitely happens. Unsurprisingly enough, it is easy to argue that some of the areas that I highlight below are people issues, but we still get to indulge in Microsoft bashing &#8211; and who doesn&#8217;t enjoy a bit of that eh?</p>
<p><span id="more-738"></span></p>
<h2>The Microsoft Effect &#8211; Good enough&#8230;</h2>
<p>Microsoft in some ways remind me of Brittany Spears*. Both crash things, both can be abusive, both get themselves into trouble with the law, both have ignored legal judgements, both have loyal fans who love them no matter what and detractors that will never accept they can do anything right, both get caught with their pants down on occasion, and both have produced some pretty ordinary crap in their time. Despite this, they sell squillions of copies and make a ton of money. </p>
<p><em>*Just in case you read this article at some future point where Brittany is long forgotten, substitute whichever starlet is in rehab</em></p>
<p>But Microsoft is *big*, Microsoft are *safe*. We already use Microsoft in the organisation now and thus Microsoft products *integrate well*. </p>
<p>So what is it about SharePoint that makes it such a magnet for a wicked project? Put quite simply, with SharePoint they have taken integration to another level. Microsoft have done their homework and created a product/platform that has a combination of the right kind of capabilities that *together* can be extremely compelling. Each component, judged individually as a point solution would not necessarily compete against dedicated products in the space. But Microsoft long ago learned that a combination of tight integration and the old 80/20 rule usually wins.</p>
<p>There have been document management systems and web content management for years. I&#8217;ve previously been involved with a large Hummingbird deployment. As soon as I saw MOSS 2007 I know it was going to massive, not because it was as good as Hummingbird, because it wasn&#8217;t. But it was *good enough* and it was made by Microsoft. Market success therefore was assured.</p>
<h2>Easy to Impress &#8211; A Mythical Example</h2>
<p>To demonstrate how effective this combination of features can be as a sales tool, consider this mythical conversation between a somewhat green, yet enthusiastic Microsoft evangelist named <strong>Bill Gates</strong>, who is discussing MOSS with key stakeholders at the company GOOSUNACLE. Their names are Scott McNealy, Sergei Brin, Steve Jobs and Larry Ellison. </p>
<p><em>(1 point for each in-joke you spot)</em></p>
<p><strong>Scott McNealy (Infrastructure Manager)</strong>: Okay Bill, here&#8217;s our key problem. We can&#8217;t find anything and our knowledge sharing is abysmal. We waste so much time trying to work out where stuff should be, and nobody follows the standards. People reinvent the wheel constantly and we keep making the same mistakes over and over again. Our file system really sucks with so much duplication and complexity. It has so much history there, that nobody wants to own it or fix it up. This has cost us market share and our bottom line is suffering. What can you do to help?</p>
<p><strong>Bill Gates</strong>: Well Scotty, (do you mind if I call you Scotty?), I am glad you asked. SharePoint represents a new way to manage your enterprise documents. It can help you with built in version control, check-in/out, metadata classification and a recycle bin. Additionally, it is web based, making it much more accessible to your staff. It is also tightly integrated with Microsoft Office, particularly the 2007 version. We also have document format conversion features and records management too.</p>
<p><strong>Sergei Brin (Knowledge Manager) </strong>: &#8220;Sweet!. Kind of makes the whole notion of a separate intranet and file system start to look &#8216;old school&#8217;. What about search? I feel very strongly that a good search engine is worth its weight in gold.</p>
<p><strong>Bill Gates</strong>: That&#8217;s a great point you make Sergei, but I think it is best you leave search to us experts at Microsoft. Now in relation to your question, search is vitally important and SharePoint has a very powerful, scalable, customisable search engine that allows you to index all sorts of data sources.&nbsp; </p>
<p><strong>Larry Ellison (Database Administrator).</strong> Okay, so you can classify and search your files and other content. But I&#8217;m a database kind of guy. What about our line of business data in our databases? Can we improve its visibility to a larger audience?</p>
<p><strong>Bill Gates</strong>: You certainly can Larry. We have several features that facilitate this, but specifically, we have the business data catalogue feature, which allows you to connect to 3rd party data sources for search, business intelligence and reporting. That way, you do not need to train your users in your line of business applications. They can simply visit the SharePoint portal, and view their dashboards and key performance indicators, so gain visibility into the business. In addition we integrate with SQL Reporting Services and can easily surface enterprise reports into the portal. Excel services is another feature that falls into this area. Imagine being able to publish your complex Excel sheets to the portal and users can interact with then without requiring excel on their desktops.</p>
<p><strong>Scott McNealy: </strong>That is all very interesting indeed, document management, business intelligence and reporting in the one product. The other big issue we have is ensuring that people do things consistently. Larry and Steve in particular, keep releasing marketing slogans without formal approval. The &#8220;unbreakable&#8221; and &#8220;sooper dooper secure&#8221;&nbsp; campaigns kind of backfired on us, and it would have been much better we had a more rigorous review process.</p>
<p><strong>Bill Gates:</strong> Ah yes Scotty my lad, that is an excellent example. SharePoint contains a powerful workflow engine under the hood, that allows us to automate business process. So for example, at Microsoft when staff members leave the company, as part of our exit process we automatically create a task for the ever popular &#8220;throw the chair sendoff&#8221;. Supporting the workflow, is the document management features that I described earlier, as well as business forms via infopath and forms server.</p>
<p><strong>Steve Jobs (Communications and Branding Manager). </strong>What about the GUI? It has to look good for people to engage with it. Additionally, I&#8217;d like the content to be available via mobile devices too. </p>
<p><strong>Bill Gates: </strong>SharePoint has a powerful web content management foundation as well. It is built upon ASP.NET, which uses a templating system known as master pages, page layouts and web parts. But rather than me get into the detail here, I&#8217;ll recommend you visit my all time favourite blog called CleverWorkArounds and read the <a href="http://www.cleverworkarounds.com/2007/10/08/sharepoint-branding-how-css-works-with-master-pages-part-1/" target="_blank">branding series</a>. It should answer all of your questions. In relation to mobile devices, content can be displayed on these devices with no additional conversion. Suffice to say that it takes advantage of some of the workflow and document management features to facilitate content editorial approval, scheduled publication, and the like. </p>
<p><strong>Steve Jobs:</strong> We are sold, Sergei, pass me the chequebook.</p>
<h2>The downsides of versatility</h2>
<p>So, Bill has sold Steve, Larry, Sergei and Scott on the possibilities of SharePoint. All of their respective buttons have been pushed and that can see it solving particular problems in the business. At a high level, they can see the value of re-use and efficiencies gained from using the same platform.</p>
<p>But which problem are we solving? If you asked them individually at this point, they would give you different answers. Its clear that Steve likes the WCM features, while Larry digs Business Intelligence. Sergey loves search and Scott wants to sort out document management. </p>
<p>Already, there is a wicked problem in the making, because it is easy to fall into the trap of &#8220;a tool looking for a problem&#8221; and nobody yet has the same definition of the problem. (one of Rittel&#8217;s key wicked problem warning signs that we covered in part 1) </p>
<h2>The panacea effect</h2>
<p>With so many features in SharePoint, combined in just the right way, it is the panacea you have been looking for. So you have found your cure, lets use it for everything right? The panacea solution often costs more, or is overkill for an initial problem, so to justify it requires you to sell it&#8217;s potential to solve other, bigger problems.</p>
<p>If you have read the first two articles in this series, you will realise pretty quickly that this is very high risk approach and can get out of hand pretty quickly. Just because a tool is versatile and has the potential to solve multiple problems does not mean it will necessarily be the best option to solve your <strong>particular </strong>problem.</p>
<p><em>Add the Microsoft effect to the panacea effect and the combination is more lethal!</em>&nbsp;</p>
<p><a href="http://www.cleverworkarounds.com/2008/02/17/selling-moss-a-choose-your-own-adventure-story/"><img style="margin: 0px 15px 0px 0px" height="324" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb34.png" width="202" align="left" border="0"/></a>IT departments are particularly guilty of going down the panacea road and the reason this happens is also unsurprising when you think about it. IT are conditioned to <strong>think</strong> in terms of &#8216;tools and services&#8217;. By that I mean that, they exist to <strong>support and manage </strong>the organisations <strong>IT services</strong>. All business divisions have a desire to consolidate, streamline and reduce wastage and the IT department is no exception. In terms of an IT Department perspective, consolidating the number of &#8220;IT services&#8221; is attractive as there is tangible cost in managing many disparate systems. </p>
<p>So on the surface of it, SharePoint brings the IT department the potential tangible advantage of a common platform to support and manage.</p>
<p>I won&#8217;t belabour this point any further, because I have written about this issue on a couple of occasions, the best example being my <a href="http://www.cleverworkarounds.com/2008/02/17/selling-moss-a-choose-your-own-adventure-story/" target="_blank">choose your own adventure</a> post and more specifically, its <a href="http://www.cleverworkarounds.com/2008/02/22/selling-moss-the-moral-of-the-story/" target="_blank">follow up</a>. To the left is the book cover I did for the choose your own adventure. Sometimes pictures speak a thousand words. <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>It is also not fair to pick on IT either. I&#8217;ve gone out to many sites where the &#8216;SharePoint champion&#8217; is not an IT person at all. But there is a consistent theme there. They want to use it because they have seen <strong>the potential</strong> for it to solve problems. Seeing the potential to solve a problem is not a problem statement. Therefore, by deploying this tool into the organisation, what problem are you solving and how do you determine if it has been effectively solved?</p>
<p>As a result of the panacea effect, we end up at another great debate of IT projects.</p>
<h2>Point solution vs platform solution</h2>
<p>I believe that as far as web content management products go, there are better point solutions around than the features SharePoint supply. <a href="http://wordpress.org/">WordPress</a> for me is a much better blog system than SharePoint, <a href="http://www.drupal.org/">Drupal</a> as a pure WCM offers similar features to SharePoint for a fraction of the cost. <a href="http://www.documentum.com/">Documentum</a> is a better records management system by far and <a href="http://www.cognos.com/">Cognos</a> is going to trump SharePoint in the business intelligence stakes. Closer to home, in my <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">SharePoint for Cisco nerds</a> series, I had a <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/#comments">comment</a> that suggested that <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/#comments">RANCID</a> was a much better choice than SharePoint for Cisco configuration backups. He is absolutely right too, it is much better. But he is equally wrong too, depending on what the problem is and the point of view of the individual. (to find out why you have to read the whole series and judge for yourself)</p>
<p>This debate is essentially a version of the &#8220;Off the Shelf&#8221; vs &#8220;Custom Designed Software&#8221; chestnut. A point solution will meet your core requirements, however it may require you to change your business processes to work around it. Custom designed solutions can integrate nicely with your business process as they are to your exact specification. But the time and cost to develop can be significantly more and requirements can be fluid or prone to creep. (and you know how project managers <strong>hate</strong> that!)</p>
<p>Ah, but of course, being a point solution, the advantage of those products are diluted as your requirements broaden. You need multiple point solutions, those point solutions need to play nice with each other. The integration and support costs start to increase.</p>
<p>Although I see SharePoint as a platform solution in general, it actually has the best and worst elements of both off the shelf <strong>and</strong> custom designed software. It can cost you a lot of dollars and it all depends on your problem being solved. For example, it can be used purely as an application development platform, where a custom solution can take advantage of SharePoint features to underpin their own application, saving development time as you do not have to write certain functionality yourself. In this scenario it was always going to be a custom development job anyway, and SharePoint actually saves you money. </p>
<p>However, some problems are best fixed with a point solution and some are not. Where you can get into trouble is investing a lot of time and effort into a platform, because of the adherence to the panacea effect. The goal behind the platform may well be legitimate and well intentioned, but at the end of day, you are potentially talking a high development cost to get it exactly the way you want when a point solution may be a fraction of the cost. </p>
<p>I previously blogged a 6 part series on <a href="http://www.cleverworkarounds.com/2007/11/17/learn-to-talk-to-your-cfo-in-their-language-part-1/">SharePoint ROI considerations</a>, and although I haven&#8217;t blogged about it yet, there are financial modelling techniques available to consider some of the esoteric considerations like &#8216;opportunity cost&#8217; of point vs platform. I will blog on this topic in the future, but for now, if you take anything away from this section, it is not to underestimate the value of the point solution when looking at your problem being solved.</p>
<h2>Conclusion</h2>
<p>*pauses for a big sigh*</p>
<p>That was a tough article to write, and the next one is probably going to be tougher, as I will no doubt have an urge to go back and edit this article. But I&#8217;ll resist that temptation as otherwise I&#8217;d never get these articles out. </p>
<p>But I hope that what you take away from this post is a deeper understanding of some of the reasons why a SharePoint project in particular can get out of hand and become wicked in nature. The quicker you spot them, the quicker you can head off the potential pain and suffering that will follow.</p>
<p>In the <a href="http://www.cleverworkarounds.com/2008/04/24/why-do-sharepoint-projects-fail-part-4/">next post</a> we will keep digging around SharePoint&#8217;s dirty little secrets and then look into some techniques that we can use to try and mitigate some of these issues.</p>
<p>cheers</p>
<p>Paul</p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/&title=Why+do+SharePoint+Projects+Fail+%26%238211%3B+Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/&title=Why+do+SharePoint+Projects+Fail+%26%238211%3B+Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/&title=Why+do+SharePoint+Projects+Fail+%26%238211%3B+Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/&title=Why+do+SharePoint+Projects+Fail+%26%238211%3B+Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco FanBoys (final housekeeping) &#8211; Part 6</title>
		<link>http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/</link>
		<comments>http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 13:30:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/</guid>
		<description><![CDATA[Hey there! Sorry it has taken me a while to get back to the Cisco articles. The &#8220;choose your own adventure&#8221; post took longer than I thought it would and I also was side tracked blogging about annoying programming issues with XML and Javascript. This is the last of the Cisco fanboy series of articles [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p>Hey there!  </p>
<p>Sorry it has taken me a while to get back to the Cisco articles. The &#8220;<a href="http://www.cleverworkarounds.com/2008/02/17/selling-moss-a-choose-your-own-adventure-story/">choose your own adventure</a>&#8221; post took longer than I thought it would and I also was side tracked blogging about annoying programming issues with <a href="http://www.cleverworkarounds.com/2008/02/06/form-services-and-spd-workflows/">XML</a> and <a href="http://www.cleverworkarounds.com/2008/02/07/more-sharepoint-branding-customisation-using-javascript-part-1/">Javascript</a>.  </p>
<p>This is the last of the Cisco fanboy series of articles and really its more a tidying up of loose ends. To call this last article a Cisco fanboy article is a bit of a stretch actually, since we are now moving to a broader level of governance and accountability, and is therefore not really about Cisco, so I&#8217;ll start a new series more appropriately titled and continue from where this article leaves off.&nbsp; </p>
<p>I started the series with the intent of starting with a seemingly innocuous scenario (Cisco TFTP backups), demonstrating how SharePoint can be leveraged as an okay point solution. I then tried to slowly expand the scope to the broader issues of complex infrastructure management management, while sticking to a Cisco/IP network oriented theme in an attempt to get technical thinkers (like Cisco guys) to think beyond nuts and bolts. This also demonstrated how thinking past &#8216;the point solution&#8217; can being more substantive benefits.&nbsp; </p>
<p><span id="more-592"></span></p>
<p>&nbsp; </p>
<p>Here is the quick recap on what we have covered so far:
<ul>
<li><a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">Part 1</a> illustrated how it it possible to use SNMP to tell a Cisco IOS device to dump its configuration to TFTP. We talked about the version control feature of SharePoint and why it makes sense to TFTP your configs to a SharePoint document library. We covered the WEBDAV network provider supplied with XP and Win2003 and finished off with a basic example using the TFTP server TFTPD32.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">Part 2</a> went into more detail about the issues you can face when using the WEBDAV network provider. It also went into more detail on 3 TFTP server products (<a href="http://www.tftp-server.com/">WinAgents TFTP</a>, <a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds TFTP Server</a> and <a href="http://tftpd32.jounin.net/">TFTPD32</a> and why TFTPD32 ended up being the best choice for this purpose.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">Part 3</a> then looked at a wonderful open source TFTP server written in C# called <a href="http://sourceforge.net/projects/tftputil">TFTPUtil</a>. We modified the source code of this TFTP server to use the SharePoint SDK and upload files to a SharePoint document library.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/">Part 4</a> continued the examination of the TFTPUtil server and another modification of it to use SharePoint web services to upload files. We then summarised the merits of each of the methods.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/">Part 5</a> switched tack and introduced a real world applicable scenario of combining Cisco configuration backups along with diagrams, documentation, asset information and site/support information into a one-stop-shop integrated portal, utilising lists, libraries and workflow to integrate it all neatly.</li>
</ul>
<p>As I said in my introduction, I intend to get into some more high level strategic stuff in relation to IT operations/infrastructure management in a forthcoming series of articles. So in this last set of articles, I will cover off one major remaining question that I think my technically minded readers would want to see addressed.</p>
<h2>&#8220;But what if SharePoint dies&#8221;?</h2>
<p>This is a very common query/issue I get. (Luckily, I have an answer that has satisfied all so far &#8230; touch wood&nbsp; <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p>Although I have been able to convince even some of the most fervent anti-Micro$oft, anti-portal people the power that SharePoint can offer for knowledge management and collaboration, people quite rightly get a little nervous about the notion of all of your critical information sitting in a single application like SharePoint. </p>
<p>Certainly, SharePoint&nbsp; is a damn complex suite of applications, meaning that it&#8217;s own backup and recovery is more complex than most applications. It requires forward planning, user and IT staff training, lots of governance, a relatively process mature IT department and a heck of a lot of other effort. <em>&#8220;and after all of that you still want me to store all of our critical information there?&#8221;</em></p>
<p>I believe absolutely that it is well worth this effort, and a cheap tool released by the guys at Colligo make the whole question somewhat redundant with the release of their cheap (but excellent) &#8220;Colligo Reader&#8221;.</p>
<p>Colligo Reader is free for personal use and cheap for corporate use. It allows a one way replication of SharePoint portals for offline access. &#8220;Yeah but Outlook and Groove can do this&#8221;, I hear you say. but this product synchronises libraries, lists, forms, all the while preserving their views. Sweet!</p>
<p>Imagine the possibilities here. Your network administrators could run a continual sync of your Cisco infrastructure portal on their laptops. In the event of a major catastrophic fault where all IT services are unavailable (including SharePoint), you have an the most up to date copy of your documentation, support information and most recent network configuration.</p>
<h2>Colligo Demonstrated</h2>
<p>So let&#8217;s install the product and synchronise the <a href="http://tidemo/tftp">http://tidemo/tftp</a> site that we used in the previous articles to illustrate how useful Colligo is.</p>
<p>Starting Colligo reader for the first time presents you with a basic GUI as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image34.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="279" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb35.png" width="604" border="0"/></a> </p>
<p>The first thing to do is to choose a SharePoint site to synchronise. Click the site drop down and choose to download a site. Enter the URL of the SharePoint site to download.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image35.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="134" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb36.png" width="235" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image36.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="233" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb37.png" width="301" border="0"/></a> </p>
<p>Colligo Reader will now perform an initial sync of the site. Depending on how much content is stored on the site, this may take some time.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image37.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="166" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb38.png" width="386" border="0"/></a> </p>
<p>One the initial sync has completed, you see the main Colligo Reader screen, except this time we can see the site listed and the documents and lists that have been synchronised.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image38.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="300" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb39.png" width="459" border="0"/></a> </p>
<p>Now let&#8217;s examine some of the lists and document libraries created in <a href="http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/">part 5</a>, that have been synchronised.</p>
<h3>IT Asset Documentation</h3>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image40.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="261" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb40.png" width="644" border="0"/></a> </p>
<p>Note that this looks somewhat like a SharePoint document library. We have our views on the top right, and we can also see the documents and the metadata columns that were created for this library. (&#8220;Related Device&#8221; and &#8220;Document Type&#8221;). Below is the same document library, illustrating the &#8220;By Document Type&#8221; view.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image50.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="302" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb41.png" width="644" border="0"/></a> </p>
<p>For reference, here is the original SharePoint view to compare.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image51.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb42.png" width="644" border="0"/></a> </p>
<h3>&#8220;Client Sites&#8221; List</h3>
<p>Below is the synchronised &#8220;Client Sites&#8221; list. Like the document library example above, all columns and views are fully synchronised.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image52.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="218" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb43.png" width="644" border="0"/></a> </p>
<h3></h3>
<h2>Caveats</h2>
<p>There are only three issues that spring to mind when using Colligo Reader. All three could be addressed by Colligo is they felt so inclined.</p>
<p>The first caveat is that only the latest version of library/list data is replicated. So those 291 versions of myfile.txt I had in my <a href="http://tidemo/tftp">http://tidemo/tftp</a> site (see below <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ), only the latest one is replicated to Colligo.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image53.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="182" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb44.png" width="410" border="0"/></a></p>
<p>I don&#8217;t see this as a major issue, as the whole point here is disaster recovery for when SharePoint is not available. </p>
<p>The second caveat is when a site is replicated, sub-sites are not replicated unless you explicitly add them to be downloaded. It would be great if you could tick a box that says to replicate the current site and all sub-sites.</p>
<p>The final caveat is the major one. I really wish that Colligo offered to password protect synchronised sites (on a site by site basis). While it is great to be able to have an up to date, offline copy of your critical infrastructure information, but some will then point to the obvious security implications of laptops containing this goldmine of sensitive information all nicely laid out for unauthorised parties to access.</p>
<p>My technical answer to this is to look at Vista/<a href="http://en.wikipedia.org/wiki/BitLocker_Drive_Encryption">bitlocker</a> (or 3rd party equivalent) encryption at an operating system level, since Colligo content isn&#8217;t necessarily the only sensitive content on a notebook or PC. </p>
<p>My non technical answer is that this is a typical risk vs reward scenario and the applicability of this solution is really dependent on your security posture. </p>
<h2>Conclusion</h2>
<p>Colligo Reader is an exceptionally useful tool for the offline synchronisation of certain types of SharePoint portals, in particular IT infrastructure and managed services portals make excellent candidates. Our example above shows that we now have VPN details, customer contacts, documentation, configuration backups and support contract details all readily available without requiring SharePoint being available. </p>
<p>So, when step back and look at all we have covered here (particularly the last two articles), we have managed to kick a few significant goals. What makes this really interesting is that we are using tools and techniques that is applicable not just for Cisco gear, but pretty much any other IT infrastructure, whether it is line of business applications, complex hardware or a combination of both. </p>
<p>Whatsmore, while not replacing the need for and value of a Business Impact Analysis and Disaster Recovery Plan, you have still in a significantly improved position if something bad was to occur.</p>
<p>As I said earlier, I&#8217;ll be revisiting this again, now more broadly, looking at this topic from the point of view of an IT Operations Manager who has compliance requirements. They are not interested in Cisco per se, but about the whole enchilada!</p>
<p>until then&#8230;</p>
<p>regards</p>
<p>Paul</p>
<p><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/&title=SharePoint+for+Cisco+FanBoys+%28final+housekeeping%29+%26%238211%3B+Part+6" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/&title=SharePoint+for+Cisco+FanBoys+%28final+housekeeping%29+%26%238211%3B+Part+6" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/&title=SharePoint+for+Cisco+FanBoys+%28final+housekeeping%29+%26%238211%3B+Part+6" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/&title=SharePoint+for+Cisco+FanBoys+%28final+housekeeping%29+%26%238211%3B+Part+6" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sharepoint for Cisco Fanboys (beyond TFTP) &#8211; Part 5</title>
		<link>http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 15:31:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/</guid>
		<description><![CDATA[Greetings SharePoint fans and Cisco people who are soon to be SharePoint fans! I&#8217;m back with part 5 of this series on leveraging features of MOSS 2007 and WSS 3.0 to help manage Cisco infrastructure. For those of you who hate programming topics and have no interest in TFTP issues, we may well have finally [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--Adsense-->
<p>Greetings SharePoint fans and Cisco people who are soon to be SharePoint fans! I&#8217;m back with part 5 of this series on leveraging features of MOSS 2007 and WSS 3.0 to help manage Cisco infrastructure.</p>
<p>For those of you who hate programming topics and have no interest in TFTP issues, we may well have finally gotten to a topic that you are interested in! For the rest of you, who have read the first four articles, we now shift our focus from getting Cisco configurations into SharePoint, to doing something useful with them once we have done so.</p>
<p>In this post, we will examine the out of the box capabilities of workflow in SharePoint and delve a little deeper into document libraries and content management. So this is more aimed at Cisco people than it is at SharePoint Pros. SharePoint people, much of the topics I cover in this article you may have seen before. </p>
<p>I personally don&#8217;t think this post has a high coffee requirement rating in terms of complexity of concepts, compared to the last two anyhow. However be prepared: it is a long read.</p>
<p>CleverWorkArounds Coffee requirement rating: <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image7.png"><img height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb7.png" width="25" border="0"/></a><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image7.png"><img height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb7.png" width="25" border="0"/></a></p>
<p><span id="more-472"></span></p>
<p>Here is the quick recap on what we have covered so far:
<ul>
<li><a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">Part 1</a> illustrated how it it possible to use SNMP to tell a Cisco IOS device to dump its configuration to TFTP. We talked about the version control feature of SharePoint and why it makes sense to TFTP your configs to a SharePoint document library. We covered the WEBDAV network provider supplied with XP and Win2003 and finished off with a basic example using the TFTP server TFTPD32.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">Part 2</a> went into more detail about the issues you can face when using the WEBDAV network provider. It also went into more detail on 3 TFTP server products (<a href="http://www.tftp-server.com/">WinAgents TFTP</a>, <a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds TFTP Server</a> and <a href="http://tftpd32.jounin.net/">TFTPD32</a> and why TFTPD32 ended up being the best choice for this purpose.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">Part 3</a> then looked at a wonderful open source TFTP server written in C# called <a href="http://sourceforge.net/projects/tftputil">TFTPUtil</a>. We modified the source code of this TFTP server to use the SharePoint SDK and upload files to a SharePoint document library.  </li>
<li>Part 4 continued the examination of the TFTPUtil server and another modification of it to use SharePoint web services to upload files. </li>
</ul>
<p>I think the best way to get stuck into part 5 is via a real-world Cisco scenario. For this scenario, I will (loosely) use one of my roles from a few years back. It was not the biggest or most complex network I&#8217;ve managed, but it was quite varied due to the nature of the business they were in.</p>
<h2>The scenario</h2>
<p>Our scenario company is called CleverWorkArounds Corp and it is a products and services company. This business is involved in <a href="http://en.wikipedia.org/wiki/Digital_signage">digital signage</a> primarily (you know all those LCD screens spamming you with information and advertisements in shopping malls, train stations, cinemas, fancy hotel lobbies, casinos, etc). </p>
<p>Below is an example of large scale digital signage. Look closely&#8230;is that a windows error I see? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image46.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="334" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb46.png" width="444" border="0"/></a> </p>
<p>There are many installations of the product all over the world. Some locations include countries with encryption restrictions or government firewalls. Many of the installations are contracted to be monitored in real-time and in many installs the day to day management is provided by CleverWorkArounds Corp as a managed service.</p>
<p>Including head office in the USA, CleverWorkArounds Corp has 5 offices around the world where the installations are put together and tested before being shipped to site.</p>
<h2>The Network</h2>
<p>The network infrastructure employed by CleverWorkArounds Corp is Cisco based. The most complex part about it is the VPN connectivity to office and client sites. There is a lot of variation. &#8220;Managed Service&#8221; type installations typically use CleverWorkArounds Corp supplied network gear on site, in a segmented or isolated network. However many installations are hosted on the client&#8217;s infrastructure, often not Cisco, and all CleverWorkArounds Corp has is a VPN connection to the site.</p>
<p>CleverWorkArounds Corp has implemented VLAN&#8217;s, <a href="http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/">wireless</a> and multicast networking at many sites. The security set-up and configuration varies from site to site, as it depends on who owns the infrastructure, security posture of the client and the level of local support on the ground at that site.</p>
<p>Finally, even the VPN technology varies. Most sites are <a href="http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/">point-to-point IPSEC</a>, but some require CleverWorkArounds Corp to use PPTP or SSL VPN via <a href="http://openvpn.net/">OpenVPN</a> when firewalls/government restrictions get in the way.</p>
<h2>The Issues</h2>
<p>The most critical issue with this type of network is security. Not only does CleverWorkArounds Corp have to protect itself from it&#8217;s clients, since many client sites are VPN connected with varying levels of security posture, CleverWorkArounds Corp also has to protect client&#8217;s from each-other. A relatively complex set of access lists are maintained and authentication to all CleverWorkArounds Corp network devices is via RADIUS and central authentication.</p>
<p>Aside from security, the CleverWorkArounds Corp corporate offices are connected to each-other via GRE tunnels over IPSEC, which allows multicast traffic and as a side effect, dynamic routing protocols. EIGRP is the protocol used. Many &#8216;lab&#8217; VLAN&#8217;s are running at any given time, while new installations are being put together. </p>
<p>On the VPN side, on top of the variation in underlying technology, some Network Address translation is performed where IP address ranges overlap, as many clients like to use the 10.0.0.0 network with a /8 subnet mask (255.0.0.0) and don&#8217;t realise how restrictive this can be when doing b2b connectivity. </p>
<h2>So What Are We Interested In Here?</h2>
<p>From the point of view of the business, all of this has to be up and running, humming along with no service disruption as downtime = lost $. No doubt you have taken out SMARTnet maintenance contracts right? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . </p>
<p>So you need to have all the tools and critical information on hand to recover as quickly as possible.</p>
<p>In my career, I&#8217;ve been dumped into the deep end a few times, inheriting pathetically maintained/managed infrastructure that is undocumented and a ticking time-bomb. Is this picture familiar? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <a href="http://www.flickr.com/photos/rabsda/174060325/"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 15px 10px 0px; border-right-width: 0px" height="379" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image47.png" width="254" align="left" border="0"/></a> </p>
<p>Thus I always like to leave a site or infrastructure well documented. However my philosophy here is not to rewrite the manual. I do make some assumptions, including the assumption that the next person taking over at least has some semblance of previous experience and understanding of the products making up the infrastructure.</p>
<p>Therefore I do not attempt to rewrite product manuals. I will write a general network SOE document to go with a layer 2 and layer 3 network diagram. The SOE will cover implementation details of the network design including RADIUS, SNMP, EIGRP, Spanning tree, VPN, VLAN&#8217;s, IP Telephony, etc. But the SOE will not explain what each of these technologies are and what they do &#8211; that is assumed information.</p>
<p>That document is around 40-60 pages usually and once written, it is fairly easy to maintain because it is not filled with constantly changing operation information. That is kept separately. For example I&#8217;ll maintain lists of each client site, including the IP range used, details and serial numbers of devices on site, maintenance agreement numbers, client contact details, passwords, VPN details such as the certificate or shared key. I&#8217;ll document what each VLAN is for, SNMP community string, etc.</p>
<p>Finally, in case you did not know already <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , I implement my perl script to back up the configurations of all of the IOS devices to TFTP. (And that perl script is well documented in the network SOE I described earlier).</p>
<p>So this is all very nice and standard practice, and we can do this <strong>without </strong>SharePoint just fine, but let&#8217;s go through an simple example of maintaining this information in SharePoint and see the benefits.</p>
<h2>SharePoint Revisited</h2>
<p>First up, let&#8217;s now modify the SharePoint site (<a href="http://tidemo/tftp">http://tidemo/tftp</a>) we were using for the TFTP experimentation. We will add some additional columns and lists. This will allow us to track much more interesting information than just the backups of router configs. </p>
<p>CleverWorkArounds caveat: This is an example and does not reflect reality! It purely serves to illustrate SharePoint&#8217;s capabilities. In addition, this is not meant as a complete newbie SharePoint tutorial or this post would get far too big &#8211; I have skipped some details here. </p>
<h2>&#8220;Clients&#8221; list</h2>
<p>First up, we have a number of clients and remote sites. So let&#8217;s create a contact list to store client and key contact details. From &#8220;Site Actions&#8221;, choose &#8220;Create&#8221; and from the list of choices, create a new Contacts list.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image48.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="102" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb47.png" width="211" border="0"/></a> </p>
<p>We will call this list &#8220;Clients&#8221; and add some clients in.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image49.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="125" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb48.png" width="554" border="0"/></a> </p>
<h2>&#8220;Client Sites&#8221; list</h2>
<p>Next up, each client can have one or more sites. For each site, we are interested in not only its physical location, but also the IP Address range used at that site, the VPN type and detail. For this we will create a <strong>custom list</strong> called &#8220;Client Sites&#8221; with the following columns</p>
<table cellspacing="0" cellpadding="2" width="590" border="1">
<tbody>
<tr>
<td valign="top" width="114">Name</td>
<td valign="top" width="100">Type</td>
<td valign="top" width="97">Scope</td>
<td valign="top" width="277">Other Information</td>
</tr>
<tr>
<td valign="top" width="114">Client</td>
<td valign="top" width="100">Lookup (Clients)</td>
<td valign="top" width="97">Site Column</td>
<td valign="top" width="277">Get information from: Clients<br />In this column: Company </td>
</tr>
<tr>
<td valign="top" width="114">Site Name</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">(renamed &#8220;Title&#8221; column)</td>
</tr>
<tr>
<td valign="top" width="114">Address</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">Site Column</td>
<td valign="top" width="277">Column already exists by default</td>
</tr>
<tr>
<td valign="top" width="114">IP Address Range</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
<tr>
<td valign="top" width="114">VPN Type</td>
<td valign="top" width="100">Choice</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">Values: IPSEC, PPTP and SSL</td>
</tr>
<tr>
<td valign="top" width="114">VPN Password/key</td>
<td valign="top" width="100">Multi Line Text</td>
<td valign="top" width="99">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Now we add some sites and assign them to the aforementioned clients. Note that in our example, ABC Incorporated has two sites. Since the Client column is a lookup against the Clients list we previously created, the &#8220;Client&#8221; column below is linked to its associated entry in the &#8220;Clients&#8221; list.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image50.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="141" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb49.png" width="644" border="0"/></a> </p>
<h2>&#8220;IT Assets&#8221; List</h2>
<p>Right! We have site information with some basic information about VPN details.How about we now create an IT Asset/Device list where we record the details about our equipment at these sites. In this list, we are interested in the type of device, its IP Address, serial number, purchase date and warranty.</p>
<table cellspacing="0" cellpadding="2" width="590" border="1">
<tbody>
<tr>
<td valign="top" width="114">Name</td>
<td valign="top" width="100">Type</td>
<td valign="top" width="97">Scope</td>
<td valign="top" width="277">Other Information</td>
</tr>
<tr>
<td valign="top" width="114">Site</td>
<td valign="top" width="100">Lookup (Client Sites)</td>
<td valign="top" width="97">Site Column</td>
<td valign="top" width="277">Get information from: Client Sites<br />In this column: Site Name</td>
</tr>
<tr>
<td valign="top" width="114">Device Name</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">(renamed &#8220;Title&#8221; column)</td>
</tr>
<tr>
<td valign="top" width="114">IP Address</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
<tr>
<td valign="top" width="114">Serial Number</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
<tr>
<td valign="top" width="114">Purchase Date</td>
<td valign="top" width="100">Date/Time</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
<tr>
<td valign="top" width="114">Device Type</td>
<td valign="top" width="100">Choice</td>
<td valign="top" width="99">List</td>
<td valign="top" width="277">Choice list includes different network equipment type. Router, Switch and Wireless Access Point</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Below is the configured list and some sample data</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image51.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="128" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb50.png" width="644" border="0"/></a> </p>
<h2>Examining the list relationships</h2>
<p>So we now have three lists containing contact information, site information and device information. Any column that is of type &#8220;lookup&#8221; is automatically linked to the source of the lookup. So in the sample above of the device list, clicking on &#8220;Milton Keynes&#8221;, takes you to the entry in the &#8220;Client Sites&#8221; list as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image52.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="226" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb51.png" width="504" border="0"/></a> </p>
<p>From here, we can example the details of the client for this site, &#8220;ABC Incorporated&#8221;. Clicking on the client reveals our contact details for that client.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image53.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="212" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb52.png" width="504" border="0"/></a> </p>
<p>So what have we achieved so far? We have taken some useful information that would usually be stored in different locations (and potentially formats/systems) and linked it together. Being web based, the information is accessible from anywhere on the network. <em>Remember, SharePoint also has a built in recycle bin and full version history if you wish to use it.</em></p>
<p>That is all well and good, but we have not linked this yet to our Cisco backups. In addition, we want to add our SOE documentation to be part of this also. So let&#8217;s create a new document library called &#8220;IT Asset Documentation&#8221;, and relate this to the devices.</p>
<h2>IT Asset Documentation Library</h2>
<p>So this time, we create a document library instead of a list. Here are our columns</p>
<table cellspacing="0" cellpadding="2" width="590" border="1">
<tbody>
<tr>
<td valign="top" width="114">Name</td>
<td valign="top" width="100">Type</td>
<td valign="top" width="97">Scope</td>
<td valign="top" width="277">Other Information</td>
</tr>
<tr>
<td valign="top" width="114">Related Device</td>
<td valign="top" width="100">Lookup (IT Assets)</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">Get information from: IT Assets<br />In this column: Device Name<br />Allow Multiple values: TRUE</td>
</tr>
<tr>
<td valign="top" width="114">Document Type</td>
<td valign="top" width="100">Choice</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">Values: SOE, Network Diagram, Maintenance Agreement, Configuration Backup</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>So, now we create or upload our SOE, Network Diagrams and Maintenance Agreements so this document library as shown below. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image54.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="209" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb53.png" width="604" border="0"/></a> </p>
<p>In case you haven&#8217;t seen it before, Office 2007 is aware that you are using a SharePoint document library and allows you to set the values of these columns from within the application itself as shown below. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image55.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="316" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb54.png" width="504" border="0"/></a> </p>
<p>By creating the &#8220;Related Device&#8221; field, we now have a direct link to the three lists created earlier in this post. In addition, we have the ability to sort, filter and group documents in this library based on the columns we have added. So for example, here is another view of the document library grouped by document type.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image56.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="224" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb55.png" width="604" border="0"/></a></p>
<p>For Cisco people reading this, notice how this view now looks a little like folders based on the document type? The importance and usefulness of views should not be underestimated. Unlike folders, views allow you to sort/manage your files much more flexibly than a static, folder structure. A single document library or list can have many views!</p>
<h2>Finally, the configuration backups!</h2>
<p>So if you were observant earlier, you would have noticed that I created a fourth document type called &#8220;Configuration Backup&#8221;, that we have not yet used. Let&#8217;s now integrate the TFTP server into this new library. </p>
<p>The simplest way that requires no customisation is to set the <strong>default</strong> document type to be &#8220;Configuration Backup&#8221;. That way, any file that is TFTP dumped into this library will be assigned that document type. So let&#8217;s modify the &#8220;Document Type&#8221; column and make this change.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image57.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="339" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb56.png" width="338" border="0"/></a> </p>
<p>It doesn&#8217;t really matter which TFTP method you use, so long as it is configured to drop files into this document library. If you use one of the TFTP servers used in part 2, then in this example the WEBDAV UNC version is:</p>
<ul>
<li>\\tidemo\tftp\IT Asset Documentation</li>
</ul>
<p>And the URL for the web service/sdk method (as described in <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">part 3</a> and <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/">part 4</a>) is:</p>
<ul>
<li>http://tidemo/tftp/IT%20Asset%20Documentation/</li>
</ul>
<p>I used the TFTPUtil method with web services and uploaded a file. Below is the document library with the new file. Note the document type!</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image58.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="249" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb57.png" width="604" border="0"/></a> </p>
<h2>Improving Integration with Workflow</h2>
<p>Let&#8217;s now do a really simple workflow example to make this a little slicker. How about when a new configuration file has been TFTP&#8217;d into this library we perform these steps:</p>
<ol>
<li>Check if the &#8216;related device&#8217; field is empty  </li>
<li>If it is empty, create a task for the network administrator to add the device details to the &#8220;IT Asset&#8221; list and link it to the uploaded file.</li>
</ol>
<p>Since we have version control enabled in this library, the first time a file is uploaded the workflow will fire, and set this task for the network administrator. Once the related item is set, subsequent uploads will trigger the workflow, but it will do nothing because the related device has already been set.</p>
<p>I&#8217;ll create this workflow using SharePoint Designer. SharePoint designer workflows are by no means the answer to global warming but they are a great method for rapid workflow development with no programming expertise required.</p>
<p>In SharePoint designer we open our site and create a new workflow from the File Menu&#8230;</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image59.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="221" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb58.png" width="465" border="0"/></a> </p>
<p>Name the workflow &#8220;Check Related-Device Field&#8221; or something similar and attach the workflow to the list &#8220;IT Asset Documentation&#8221;. Make sure the box to &#8220;Automatically start this workflow when a new item is created&#8221; is ticked.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image60.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="232" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb59.png" width="481" border="0"/></a> </p>
<p>Click NEXT and we add our first and only workflow step. The first thing to do is add a condition. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image61.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="63" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb60.png" width="244" border="0"/></a> </p>
<p>The first condition is always to compare the value of a field in the list the workflow is assigned to &#8220;IT Asset Documentation&#8221;. Click it, and choose the &#8220;Related Devices&#8221; field for the &#8220;field&#8221; parameter. Click the &#8220;equals&#8221; parameter and choose &#8220;is empty&#8221;.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image62.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="44" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb61.png" width="294" border="0"/></a> </p>
<p>Now we will create our action to assign the task to the network administrator. Click the &#8220;Actions&#8221; button and choose &#8220;Assign a To-do Item&#8221;.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image63.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="139" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb62.png" width="220" border="0"/></a> </p>
<p>Now in the newly created action, click &#8220;a to-do item&#8221; and on the next screen create a task name called &#8220;Update Cisco Config Documentation&#8221; and give it an appropriate description. Then Click &#8220;Finish&#8221;</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image64.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="265" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb63.png" width="354" border="0"/></a> </p>
<p>Finally, we assign this to-do to the network administrator by clicking the &#8220;these users&#8221; link and finding the network administrator in the address book (Active Directory).</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image65.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="127" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb64.png" width="384" border="0"/></a> </p>
<p>So here is the completed action.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image66.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="40" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb65.png" width="384" border="0"/></a> </p>
<p>Click &#8220;Finish&#8221; and we are all set!</p>
<h2>Testing it out</h2>
<p>So, let&#8217;s test by uploading a new file.</p>
<p><font face="Courier">C:\&gt;tftp 192.168.134.129 put c:\myfile.txt ABCRTR03<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font>  </p>
<p>And the document library&#8230;</p>
<p>WOHOO! You can see a new column has been created to track our workflow status.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image67.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="120" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb66.png" width="604" border="0"/></a> </p>
<p>The status is &#8220;In Progress&#8221;, because it is waiting for a task to be completed. If we examine our SharePoint site, we have a new list, called &#8230; wait for it &#8230; &#8220;Tasks&#8221;!!</p>
<p>Let&#8217;s take a look at it!</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image68.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="92" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb67.png" width="604" border="0"/></a>  </p>
<p>If you click on this task (which also can be viewed and edited in Outlook), we can view this exciting task.  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image69.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="233" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb68.png" width="604" border="0"/></a>  </p>
<p>So our network administrator has received this task and has dutifully created a new entry for this router in the &#8220;IT Asset&#8221; list. They have then updated the &#8220;Related Device&#8221; column in the &#8220;IT Asset Documentation&#8221; as shown below  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image70.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb69.png" width="264" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image71.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="161" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb70.png" width="294" border="0"/></a>  </p>
<p>So now our intrepid network admin can edit this task and mark it as complete! Click da button!!  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image72.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="96" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb71.png" width="604" border="0"/></a>  </p>
<p>Now that the task has been completed, the workflow has completed and this is reflected in the &#8220;IT Asset Documentation&#8221; library as shown below. Note the workflow status is &#8220;completed&#8221;. Cool!  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image73.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="89" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb72.png" width="604" border="0"/></a><br />
<h2>Conclusion</h2>
</p>
<p>So what have we achieved here? This is a really basic example of improving configuration management, streamlining a process, improving the quality of documentation and enforcing accountability because we now have an audit trail of the task being assigned and completed. </p>
<p>We really are scratching the surface though. We have the tools here to implement much more that just making sure that something is documented.&nbsp; In the next post, we will expand on this site and incorporate a change control mechanism using forms services. We will also start to look at this sort of stuff from a higher level, strategic viewpoint in the context of the &#8216;greater&#8217; IT infrastructure management.</p>
<p>In conclusion, I hope that you Cisco guys found this post useful and look out for part 6 of this series in the near future.</p>
<p>Cheers</p>
<p>Paul</p>
<p><!--Adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/&title=Sharepoint+for+Cisco+Fanboys+%28beyond+TFTP%29+%26%238211%3B+Part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/&title=Sharepoint+for+Cisco+Fanboys+%28beyond+TFTP%29+%26%238211%3B+Part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/&title=Sharepoint+for+Cisco+Fanboys+%28beyond+TFTP%29+%26%238211%3B+Part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/&title=Sharepoint+for+Cisco+Fanboys+%28beyond+TFTP%29+%26%238211%3B+Part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco Fanboys (and more developers) &#8211; Part 4</title>
		<link>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/#comments</comments>
		<pubDate>Sat, 26 Jan 2008 11:38:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/</guid>
		<description><![CDATA[Welcome to part 4 of my series on demonstrating SharePoint&#8217;s usefulness for storing Cisco configuration backups. What a hard slog it&#8217;s been! The last article (part 3) of this series focused on how to modify an open source C# TFTP server to upload files into a SharePoint document library using the SharePoint SDK. Here is [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--Adsense--></p>
<p>Welcome to part 4 of my series on demonstrating SharePoint&#8217;s usefulness for storing Cisco configuration backups. What a hard slog it&#8217;s been! The last article (<a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">part 3</a>) of this series focused on how to modify an open source C# TFTP server to upload files into a SharePoint document library using the SharePoint SDK.</p>
<p>Here is the quick recap on what we have covered so far</p>
<ul>
<li><a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">Part 1</a> illustrated how it it possible to use SNMP to tell a Cisco IOS device to dump its configuration to TFTP. We talked about the version control feature of SharePoint and why it makes sense to TFTP your configs to a SharePoint document library. We covered the WEBDAV network provider supplied with XP and Win2003 and finished off with a basic example using the TFTP server TFTPD32.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">Part 2</a> went into more detail about the issues you can face when using the WEBDAV network provider. It also went into more detail on 3 TFTP server products (<a href="http://www.tftp-server.com/">WinAgents TFTP</a>, <a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds TFTP Server</a> and <a href="http://tftpd32.jounin.net/">TFTPD32</a> and why TFTPD32 ended up being the best choice for this purpose.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">Part 3</a> then looked at a wonderful open source TFTP server written in C# called <a href="http://sourceforge.net/projects/tftputil">TFTPUtil</a>. We modified the source code of this TFTP server to use the SharePoint SDK and upload files to a SharePoint document library. </li>
</ul>
<p>Now both the WEBDAV and SDK methods had some issues. The WEBDAV method was obviously easy to set up because pretty much any application (theoretically anyway) can be made to work with it. I, however, had reliability issues with this method as <a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">part 2</a> detailed. The SDK method was much more reliable, but had its own problems. Many people would be uncomfortable with having to perform custom modification of an existing open source TFTP server, but more importantly, there are security implications with this method too.</p>
<p>So we have one remaining method that we can explore. This method is still based around modifications to the TFTPUtil source code but instead of using the SharePoint SDK, we instead use the SharePoint web services.</p>
<p><span id="more-416"></span></p>
<h2>SharePoint 2007 Web Services</h2>
<p>SharePoint can be remotely interacted with via Web Services. Out of the box, a number of web services are provided and shown below (along with the URL of the service based around my sample SharePoint server used in this series).</p>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774865.aspx">Administration Web Service</a> (http://tidemo/_vti_adm/Admin.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774411.aspx">Alerts Web Service</a> (http://tidemo/_vti_bin/Alerts.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/aa979750.aspx">Authentication Web Service</a> (http://tidemo/_vti_bin/Authentication.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774619.aspx">Copy Web Service</a> (http://tidemo/_vti_bin/Copy.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774834.aspx">Document Workspace Web Service</a> (http://tidemo/_vti_bin/Dws.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772564.aspx">Forms Web Service</a> (http://tidemo/_vti_bin/Forms.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774467.aspx">Imaging Web Service</a> (http://tidemo/_vti_bin/Imaging.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774413.aspx">List Data Retrieval Web Service</a> (http://tidemo/_vti_bin/DspSts.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774654.aspx">Lists Web Service</a> (http://tidemo/_vti_bin/Lists.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774629.aspx">Meetings Web Service</a> (http://tidemo/_vti_bin/Meetings.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772618.aspx">People Web Service</a> (http://tidemo/_vti_bin/People.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms773592.aspx">Permissions Web Service</a> (http://tidemo/_vti_bin/Permissions.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms457703.aspx">SharePoint Directory Management Web Service</a> (  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774821.aspx">Site Data Web Service</a> (http://tidemo/_vti_bin/SiteData.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774847.aspx">Sites Web Service</a> (http://tidemo/_vti_bin/Sites.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774707.aspx">Search Web Service</a> (http://tidemo/_vti_bin/spsearch.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772647.aspx">Users and Groups Web Service</a> (http://tidemo/_vti_bin/usergroup.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772545.aspx">Versions Web Service</a> (http://tidemo/_vti_bin/Versions.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774725.aspx">Views Web Service</a> (http://tidemo/_vti_bin/Views.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774569.aspx">Web Part Pages Web Service</a> (http://tidemo/_vti_bin/WebPartPages.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772553.aspx">Webs Web Service</a> (<a href="http://tidemo/_vti_bin/Webs.asmx">http://tidemo/_vti_bin/Webs.asmx</a>) </li>
</ul>
<p>So let&#8217;s go back to our TFTPutil project in Visual Studio and use Web Services instead of the SDK</p>
<h2>Modification Example #2 Web Services</h2>
<p>Initially I thought that I was going to have to write my own web service to upload a file to SharePoint, but like TFTPUtil, it didn&#8217;t take much googling to find that the hard work had already been done.</p>
<p>In this case, it was the excellent <a href="http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html">work</a> by <a href="http://www.blogger.com/profile/07046898420109468604">txs8311</a>. He had written some articles on how to upload into SharePoint via methods provided by the out of the box web services. We will incorporate his work into TFTPUtil and see how it goes!</p>
<p>Out of respect for txs8311, I will not re-paste his code here, but I will show how I have incorporated it into TFTPUtil.</p>
<p>If you check his <a href="http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html">blog post</a>, he has created a class called DocLibHelper. We will add this as a class to TFTPUtil and then call it from the TFTPServerProcess class that we modified in my <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">last post</a>.</p>
<p>So let&#8217;s go back to our TFTPUtil project in Visual Studio and add a new item to the project. Add a class and call it DocLibHelper.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image40.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="66" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb40.png" width="347" border="0"/></a></p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image41.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="392" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb41.png" width="644" border="0"/></a> \</p>
<p>Once added, paste the content of the DocLibHelper class from txs8311&#8242;s site. Do not forget to add the references to the libraries used by the code.</p>
<pre class="csharpcode"><span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Text;
<span class="kwrd">using</span> System.Net;
<span class="kwrd">using</span> System.IO;
<span class="kwrd">using</span> System.Xml;</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Finally, the code interacts with the Lists web service (lists.asmx) and we need to add a reference to a SharePoint web service so we can compile and test the code against the lists web service. From the &#8220;Project&#8221; menu, choose &#8220;Add Web Reference&#8221;. In the URL, connect to the lists service for your SharePoint server (in my case <a href="http://tidemo/_vti_bin/Lists.asmx">http://tidemo/_vti_bin/Lists.asmx</a>)</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image42.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="454" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb42.png" width="644" border="0"/></a></p>
<p>You MUST name this Web Reference <strong>ListsService </strong>as txs8311&#8242;s code expects it to be this name.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image43.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="349" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb43.png" width="644" border="0"/></a></p>
<p>That&#8217;s it for the webservice code! Now let&#8217;s modify the TFTPServerProcess class to use it! (I go into detail on modifying this class in the <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">previous post</a>).</p>
<pre class="csharpcode">State.Close();
<span class="kwrd">if</span> (IsSharePoint){
    <span class="rem">// Now we add this newly downloaded file to the document library</span>
    <span class="kwrd">try</span>
    {
        DocLibHelper docLibHelper = <span class="kwrd">new</span> DocLibHelper();
        Dictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt; properties = <span class="kwrd">new</span> Dictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt;();
        properties.Add(<span class="str">"Title"</span>, State.Filename);
        <span class="kwrd">string</span> uploadURL = TempPath + <span class="str">@"/"</span> + State.Filename;
        <span class="rem">//Create or overwrite text file test.txt in 'Docs' document library creating folder 'Test Folder' as required.</span>
        docLibHelper.Upload(uploadURL, System.Text.Encoding.ASCII.GetBytes(FullPath + <span class="str">@"/"</span> + State.Filename), properties);

        <span class="rem">// clean up temp file</span>
        File.Delete(FullPath + <span class="str">@"/"</span> + State.Filename);
    }
    <span class="kwrd">catch</span> (Exception ex)
    {
        AddMsg(Level.Verbose, <span class="str">"Problem opening SharePoint site"</span> + TempPath);
        AddMsg(Level.Debug, <span class="str">"Exception: "</span> + ex.Message + <span class="str">"\n"</span> + ex.StackTrace);
    }
}
<span class="rem">// This is the last block so go ahead and setup to delete stateStopListener(); </span>
StopListener(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>So let&#8217;s have a closer look at this code. Now we are invoking an object based on txs8311&#8242;s the DocLibHelper class, rather than the SharePoint SDK classes. After creating an instance of DocLibHelper, we create a <a href="http://msdn2.microsoft.com/en-us/library/xfhwa508.aspx">dictionary</a> object to hold the properties of the file. We will write the name of the file to the &#8220;Title&#8221; column (the result of which you will see later).
</p>
<p>We then call the Upload method, passing in the URL, a reference to the file to be uploaded and the properties dictionary.</p>
<h2>One little gotcha!</h2>
<p>One minor thing that I have to mention here, as I got caught by it. Web Services are case-sensitive! The invocation code on the console application was the following:</p>
<pre class="csharpcode">TFTPServer myTFTP = <span class="kwrd">new</span> TFTPServer();
myTFTP.AllowWRQ = <span class="kwrd">true</span>;
myTFTP.AllowWRQOverwrite = <span class="kwrd">true</span>;
myTFTP.Path = <span class="str">@"http://tidemo/tftp/backups"</span>;
myTFTP.StartListener(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>But in SharePoint the document library is actually called &#8220;Backups&#8221;. See the problem? I kept getting exception errors telling me &#8220;List not found&#8221;, and it took me a while to twig to the fact that I had to fix up line 4 of the above code.</p>
<pre class="csharpcode">myTFTP.Path = <span class="str">@"http://tidemo/tftp/Backups"</span>;</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Now that oughta do it! Let&#8217;s test!</p>
<p>Now we attempt an upload.</p>
<p><font face="courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s </font></p>
<p>Sweet!</p>
<p>Let&#8217;s check the document library. First up view properties so we can see the title field. Very good.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image44.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb44.png" width="368" border="0"/></a></p>
<p>Okay now let&#8217;s do a few more TFTP PUT&#8217;s.</p>
<p><font face="courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="courier">[snip]</font></p>
<p><font face="courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>So let&#8217;s look at the version history. What do you see now? SharePoint will report changes to properties (column values) in the version history. Version 285 of myfile.txt was the version where I updated the title property.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image45.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="285" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb45.png" width="644" border="0"/></a></p>
<p>This method works nicely. The only problem I encountered was a delay after the first running of the program. To connect to the lists webservice, authenticate and call the necessary methods a little while on the first attempt. But subsequent attempts were fine. Since I did this on a VM on a heavily loaded laptop, it may not be noticeable in a prod environment at all.</p>
<h2>Modification Example #3, FrontPage Extensions and RPC</h2>
<p>txs8311 also wrote a <a href="http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html">second part</a> to his posts on uploading files into SharePoint. In this post he rewrote his DocLibHelper class to use FrontPage extensions and RPC. I did not try this, as I was satisfied with the modification Example #2. But all you should need to do, is replace the code in the DocLibHelper class with the code from his page.</p>
<p>If you are more keen than me, feel free to give it a shot and let me know how you go!</p>
<h2>Summary of Upload Methods</h2>
<p>So let&#8217;s recap on the three TFTP upload methods that we have used and summarise the advantages and disadvantages of each.</p>
<table cellspacing="0" cellpadding="2" width="728" border="1">
<tbody>
<tr>
<td valign="top" width="165"><strong>Method</strong></td>
<td valign="top" width="279"><strong>Advantages</strong></td>
<td valign="top" width="279"><strong>Disadvantages</strong></td>
</tr>
<tr>
<td valign="top" width="165">WEBDAV</td>
<td valign="top" width="279">Compatible (in theory) with most applications<br />Choice of TFTP Servers<br />TFTP Application does not need to run on the SharePoint server</td>
<td valign="top" width="278">Stability/Reliability issues<br />Cannot update metadata/document library columns</td>
</tr>
<tr>
<td valign="top" width="165">SharePoint SDK</td>
<td valign="top" width="279">No stability/reliability issues<br />Ability to update metadata/document library columns</td>
<td valign="top" width="278">Applications need to explicitly support this method<br />Custom TFTP Server needed to be modified<br />Application must run on a SharePoint farm server<br />Application requires administrative privileges on the server it runs from, has to be a farm administrator and requires read/write access to the Sharepoint SQL databases</td>
</tr>
<tr>
<td valign="top" width="165">SharePoint Web Services</td>
<td valign="top" width="279">No stability/reliability issues<br />Ability to update metadata/document library columns<br />TFTP Application does not need to run on the SharePoint server</td>
<td valign="top" width="278">Applications need to explicitly support this method<br />Custom TFTP Server needed to be modified</td>
</tr>
</tbody>
</table>
<p><strong>CleverWorkArounds Rating: Rock on SharePoint Web Services!</strong></p>
<h2></h2>
<h2>Additional Coolness</h2>
<p>Since we have modified this TFTP Server to our requirements, you are pretty much free to add SharePoint specific features to make integration even nicer. One feature that springs to mind is setting more metadata properties when the files are uploaded. Here is an example. Let&#8217;s assume that we have a list of Cisco IP addresses and the MODEL and TYPE of device on that address. E.g 6509 Switch, 3725 Router or Aironet 350 Wireless Access Point.</p>
<p>It would be pretty easy to modify our TFTP server to be able to <strong>examine </strong>this list when receiving a file and based on the IP of the sender of the file, write the <strong>type of device </strong>to a &#8220;Device Type&#8221; column in our configuration backups library.</p>
<p>Better still, it would then be very cool if that list of IP&#8217;s and device types <strong>already exist in SharePoint. </strong>Imagine this list exists in the form of an IP address register or better still, an IT device asset register (along with serial numbers, maintenance contract information and the like). It would be easy for staff to maintain this information and the list would have version control just like our &#8220;Backups&#8221; document library. But for me what would be really nice about this method is the organisational efficiency that would be gained.</p>
<p>That gain is this: The person that updates the asset register list isn&#8217;t necessarily the Cisco engineer that sets up the device. Critical device information is entered ONCE and leveraged from then on. The next post in this series will expand on these benefits.</p>
<h2>Conclusion</h2>
<p>Right! We are <strong>DONE </strong>with getting files into SharePoint and about damn time too!</p>
<p>The next posts in this series will move away from application development and infrastructure issues and move into some higher level governance issues. The aim here is to show Cisco and IT infrastructure people what you can do with SharePoint once you get the data into SharePoint. I hope if I do a decent job of writing it, that it will be easy to see just how this can be re-used for any IT infrastructure management.</p>
<p>But for now, I bid you adieu until then&#8230;.</p>
<p><!--Adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/&title=SharePoint+for+Cisco+Fanboys+%28and+more+developers%29+%26%238211%3B+Part+4" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/&title=SharePoint+for+Cisco+Fanboys+%28and+more+developers%29+%26%238211%3B+Part+4" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/&title=SharePoint+for+Cisco+Fanboys+%28and+more+developers%29+%26%238211%3B+Part+4" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/&title=SharePoint+for+Cisco+Fanboys+%28and+more+developers%29+%26%238211%3B+Part+4" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco Fanboys (and developers) -Part 3</title>
		<link>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 23:59:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[WEBDAV]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/</guid>
		<description><![CDATA[As I write this series, it is getting less and less about Cisco and more and more about SharePoint. This article is definitely developer centric, but since Cisco guys tend to be interested in the guts of the detail, I decided to keep going . If you read my articles I tend to take the [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p>As I write this series, it is getting less and less about Cisco and more and more about SharePoint. This article is definitely developer centric, but since Cisco guys tend to be interested in the guts of the detail, I decided to keep going <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>If you read my articles I tend to take the piss out of IT role stereotypes just to make it more entertaining reading. Sales guys and IT Managers tend to cop it the most, but I also like to have a dig at the expense of the nerds too. Cisco nerds on the whole are a great bunch, but I have to say, the scariest nerd I have ever met drank Cisco kool-aid in jumbo size!</p>
<p>If you have gotten to this article after reading the first two and you are scoffing at my audacity to suggest you TFTP your configs into SharePoint, chances are most people think you&#8217;re scary! If you are hitting this series of articles for the first time, go back and read <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">part 1</a> and <a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">part 2</a> before being scary!</p>
<p>Seriously now, I thought that this would be a 2 part set of articles, but I got all bogged down in the methods of getting files into SharePoint. The WEBDAV based methods described in the previous article is easy to do, but ultimately is not the recommended method. So now, we will look at the &#8216;proper&#8217; ways to do it and see if they are worth the effort. They work okay, but are more complex and I&#8217;m not convinced that the governance issues are necessarily worth it for many readers.</p>
<p>Degree of difficulty for this article is varied.</p>
<p>CleverWorkArounds Coffee requirement rating (for an application developer): <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image7.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb7.png" width="25" border="0"/></a>&nbsp;</p>
<p>CleverWorkArounds Coffee requirement rating (for a non developer): <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image8.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb8.png" width="25" border="0"/></a>&nbsp; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image9.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb9.png" width="25" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image10.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb10.png" width="25" border="0"/></a>&nbsp;<a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image8.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb8.png" width="25" border="0"/></a></p>
<p><span id="more-403"></span></p>
<h2>How can we we *not* use WEBDAV?</h2>
<p>If we are using methods other than WEBDAV, then how are our existing applications supposed to work? I mean, all they know is the windows networking API. So, unless the other methods are implemented as a redirector (as described in more detail in the &#8220;WEBDAV Interlude&#8221; section of my <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">first article</a>), how can they use any other API?</p>
<p>The answer is, they can&#8217;t! So we are leaving the world of freeware and cheap TFTP servers and writing our own one!</p>
<p>&#8220;What? I&#8217;m no coder&#8221;, you say? That&#8217;s okay, nor am I&#8230; but stick with me anyway. </p>
<p>Okay, how about we modify someone else&#8217;s open source TFTP Server to work with SharePoint via non WEBDAV methods? </p>
<p>Fortunately for us, such a TFTP server does exist. In addition to being conveniently modifiable (got to love open source), it is multithreaded, very well written and easy to understand and extend.&nbsp; Kudos to the author. If you write a few scripts here and there, it should be enough for this article.</p>
<p>So let&#8217;s take a closer look. If you already know visual studio you can skip the next section and move to the section entitled &#8220;Examining the Code&#8221;. Otherwise let&#8217;s keep going getting this TFTP Server compiled!</p>
<h2>Getting TFTPUTIL compiled</h2>
<p>Head on over to <a title="http://sourceforge.net/projects/tftputil" href="http://sourceforge.net/projects/tftputil">http://sourceforge.net/projects/tftputil</a> and <a href="http://sourceforge.net/project/showfiles.php?group_id=154247&amp;package_id=171337&amp;release_id=466365">download</a> the latest release. Crank out Visual Studio 2005 and take a look at it.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image30.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb30.png" width="222" border="0"/></a> </p>
<p>This server is implemented as a class, so you have to write your own little program to make use of this class by creating a TFTP server object. You do by adding a new project to your Visual Studio workspace. But before we do that, how about we deal with a pre-requisite component.</p>
<p>The TFTPUtil class makes use of a library of useful functions called <a href="http://sourceforge.net/projects/nspring">NSpring</a>. You will want to download this. Grab the nspring.dll, and then tell Visual Studio how to find it by choose &#8220;Add Reference&#8221; from the &#8220;Project&#8221; menu, . At the resulting dialog box, go to the &#8220;Browse&#8221; tab and navigate to where you downloaded nspring.dll. (Best to put into C:\WINDOWS\SYSTEM32 or use the same folder where the TFTPutil code lives).</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image31.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="378" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb31.png" width="468" border="0"/></a> </p>
<p>Right, we are all set! You could compile and build TFTPUtil.DLL right now, but it would not do you a lot of good because it&#8217;s a class and does not run on its own. It needs to be *invoked*. This means we need to create a little application that creates an *instance* of the TFTPUtil class. Right click on the project and choose &#8220;Add New project&#8221; as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image32.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb32.png" width="244" border="0"/></a> </p>
<p>For our purposes, we create a new &#8220;Console Application&#8221; project and call it myTFTPServer or something meaningful to you. This will be a small EXE file that uses the TFTPUtil class to create a TFTP server.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image33.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="413" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb33.png" width="644" border="0"/></a> </p>
<p>Now, right click on the newly created project and choose &#8220;Set up Startup Project&#8221;</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image34.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="99" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb34.png" width="217" border="0"/></a> </p>
<p>Next step, we need to tell this new console application project how to find the TFTPUtil class. From the Project menu, choose &#8220;Add Reference&#8221;. At the resulting dialog box, go to the &#8220;Project&#8221; tab and you will see the open TFTPUtil project. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image35.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="124" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb35.png" width="384" border="0"/></a> </p>
<p>Right, that should be it! Your Visual studio should look something similar to this</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image36.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="382" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb36.png" width="217" border="0"/></a> </p>
<h2>Creating a basic TFTP server</h2>
<p>This is a well written TFTP server. Everything is very nicely modular and easy to understand without getting into too much complexity.</p>
<p>So first up, here is the 5 lines of code of your console application to get the TFTP server working. Add this to the code section of the <strong>static void Main(string[] args)</strong> method.</p>
<pre class="csharpcode"><span class="kwrd">using</span> TFTPUtil;

TFTPServer myTFTP = <span class="kwrd">new</span> TFTPServer();
myTFTP.Path= <span class="str">"C:\TEMP"</span>;
myTFTP.AllowWRQ = <span class="kwrd">true</span>;
myTFTP.AllowWRQOverwrite = <span class="kwrd">true</span>;
myTFTP.StartListener(); 
</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Those 5 lines create a new TFTP server object, set the destination folder, allow it to receive files, overwrite received files and start the TFTP server. If you now compile and build this solution you will end up with the files TFTPutil.DLL and myTFTPServer.EXE.</p>
<p>You should be able to test it now. (By default, files will be uploaded to the folder the EXE is run from unless you specify a path).</p>
<h2>Examining the code</h2>
<p>Now let&#8217;s look at the area of the TFTP server where we need to add some code. It is in TFTPServerProcess.css in a method called &#8220;ProcessDataGram&#8221;</p>
<p>If you examine this method, you will see the following code (just search for it):</p>
<pre class="csharpcode" style="width: 656px; height: 93px">AddMsg(Level.Info, <span class="str">"Successfully received file "</span> + State.Filename + <span class="str">" ("</span> + State.Filesize.ToString() + <span class="str">" bytes) from "</span> + State.RemoteIPAddress + <span class="str">" in "</span> + TotalTime.ToString() + <span class="str">" seconds ("</span> + (Rate).ToString() + <span class="str">" bytes/sec)."</span>);
<span class="rem">//This is the last block so go ahead and setup to delete state</span>
State.Close(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>We will make some fairly basic modifications to the server in this section, so that the file is uploaded to SharePoint.
</p>
<p>There are several methods that can be used to get files into SharePoint. We will do this first by using the most obvious way: The SharePoint SDK.</p>
<p>&nbsp;</p>
<p><iframe style="border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none" border="0" marginwidth="0" marginheight="0" src="http://rcm.amazon.com/e/cm?t=cleverwo-20&amp;o=1&amp;p=48&amp;l=st1&amp;mode=books&amp;search=sharepoint%20development&amp;fc1=000000&amp;lt1=&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" width="99%" scrolling="no" height="90"></iframe></p>
<h2>&nbsp;</h2>
<h2>Modification example #1 &#8211; The SharePoint SDK</h2>
<p>The SharePoint SDK is definitely the easiest way to upload a file, but there are several caveats:</p>
<ul>
<li>The TFTP server MUST run on a server that is a member of the SharePoint farm
</li>
<li>The TFTP service account MUST have administrative privileges on the server and SQL access</li>
</ul>
<p>That second requirement in particular just plain sucks. After going to the trouble in part 1 to set up low privileged account &#8220;tftp service&#8221; with &#8220;contribute&#8221; access to a document library, we now find that we need to grant the account significantly more privileges than before. My security nazi Cisco readers will read that and say &#8220;no way will I do that&#8221;, and I would concur. But fortunately for my readers (and unfortunately for me) I only discovered that caveat AFTER I had gotten it working. So I will show you the code changes anyway.</p>
<p>So, first up I will tell you what we will do. The aforementioned ProcessDataGram uses a class called <strong>State</strong> that is used to write the file to the file system. Then later the method Close() closes the file that has been uploaded.</p>
<p>So what we will do, is upload the file to SharePoint just after State.Close(). This means the file is still downloaded to the local file system and then <strong>copied</strong> to SharePoint. Therefore, the local file system is now simply a temporary place for the file to be stored, prior to it be uploaded to SharePoint.</p>
<p>To do this, we will change how TFTPUTIL handles the PATH property. Recall in my basic TFTP console application example code I could set the path via: </p>
<pre class="csharpcode">myTFTP.Path = <span class="str">"C:\TEMP"</span>;</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>So let&#8217;s change this behaviour so that if Path contains the string &#8220;http://&#8221;, we assume it is a SharePoint path, rather than a file system path. Therefore we set the internal file path to %TEMP% so we can still capture the file, but then we will upload it to the http:// specified SharePoint site.</p>
<p>Path is a property of the TFTPUtil class that is defined in TFTPServer.cs. We will make a minor change to the Path property, because it performs a check that will always fail when a SharePoint URL is supplied.</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">string</span> Path
{
    get
    {
        <span class="kwrd">return</span> FullPath;
    }
    set
    <strong>{
        <span class="kwrd">if</span> (<span class="kwrd">value</span>.Contains(<span class="str">"http://"</span>)) {
            FullPath = <span class="kwrd">value</span>;
        } <span class="kwrd">else</span>
        {</strong>
        <span class="kwrd">if</span> (System.IO.Directory.Exists(<span class="kwrd">value</span>))
            FullPath = <span class="kwrd">value</span>;
        <strong>}</strong>
    }
} </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Now we turn our attention to the TFTPServerProcess.cs file where we have to modify the TFTPServerProcess class. We will add two more properties to the TFTPServerProcess class. Find the declaration for FullPath and then add the two lines in bold below it.</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">string</span> FullPath = System.IO.Directory.GetCurrentDirectory();
<strong><span class="kwrd">private</span> <span class="kwrd">string</span> TempPath = System.IO.Directory.GetCurrentDirectory();
<span class="kwrd">private</span> <span class="kwrd">bool</span> IsSharePoint = <span class="kwrd">false</span>; // If <span class="kwrd">this</span> <span class="kwrd">is</span> a sharepoint site</strong> </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Also while we are here, add a reference to the SharePoint dll.</p>
<pre class="csharpcode"><span class="kwrd">using</span> Microsoft.SharePoint; </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>You will find the Microsoft.SharePoint.DLL in C:\Program Files\Common Files\Microsoft Shared\web server extensions on most installations.
</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image37.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="262" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb37.png" width="328" border="0"/></a> </p>
<p>Next, we need to add some basic logic to the code where the TFTPServerProcess class is initialised. It is an overloaded class so it is declared twice. To keep it simple, I have added the code to each declaration. If this is a Sharepoint path, it copies the supplied path to a variable called TempPath, and then puts the path of %TEMP% into the FullPath. This is deliberately done so that minimal code changes elsewhere are required (ie the rest of the class expects a variable called FullPath to point to a filesystem, not SharePoint).</p>
<p>Thus, it looks like this (bold):</p>
<p>Declaration 1:</p>
<pre class="csharpcode"><span class="kwrd">public</span> TFTPServerProcess() 

<strong><span class="kwrd">if</span> (FullPath.Contains(<span class="str">"http://"</span>))
{
    IsSharePoint = <span class="kwrd">true</span>;
    TempPath = FullPath;
    FullPath = Path.GetTempPath();
}
</strong>
</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Declaration 2:</p>
<pre class="csharpcode"><span class="kwrd">public</span> TFTPServerProcess(<span class="kwrd">string</span> FilePath,
    Level LoggingLevel,
    Level DisplayLevel,
    <span class="kwrd">bool</span> AllowRRQ,
    <span class="kwrd">bool</span> AllowWRQ,
    <span class="kwrd">bool</span> AllowWRQOverwrite,
    <span class="kwrd">bool</span> AllowTFTPOptions,
    <span class="kwrd">bool</span> CheckReadWriteState,
    <span class="kwrd">int</span> ResendInterval,
    <span class="kwrd">int</span> TimeoutInterval,
    Logger logger,
    IPAddress srvaddr)
{ 

    <strong><span class="kwrd">if</span> (FilePath.Contains(<span class="str">"http://"</span>))
    {
        IsSharePoint = <span class="kwrd">true</span>;
        TempPath = FilePath;
        FullPath = Path.GetTempPath();
    }
    <span class="kwrd">else</span>
    {
        FullPath = FilePath;
    }
</strong>
</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Finally, we add some code just after the State.Close() method as shown earlier. This takes the downloaded file from %TEMP%, uploads it to SharePoint and then deletes the file from %TEMP%.</p>
<pre class="csharpcode">State.Close();
<span class="kwrd">if</span> (IsSharePoint)
{
    <span class="rem">// Now we add this newly downloaded file to the document library</span>
    <span class="kwrd">try</span>
    {
        SPSite DestSite = <span class="kwrd">new</span> SPSite(TempPath);
        SPWeb DestWeb = DestSite.OpenWeb();
        DestWeb.AllowUnsafeUpdates = <span class="kwrd">true</span>;
        SPFileCollection files = DestWeb.Files;
        FileStream destFile = File.OpenRead(FullPath + <span class="str">@"/"</span> + State.Filename);
        <span class="kwrd">string</span> destFileURL = TempPath + <span class="str">"/"</span> + State.Filename;
        Hashtable MetaDataTable = <span class="kwrd">new</span> Hashtable();
        SPFile destSPFile = files.Add(destFileURL, destFile, MetaDataTable, <span class="kwrd">true</span>);
        destFile.Close();
        <span class="rem">// clean up temp file</span>
        File.Delete(FullPath + <span class="str">@"/"</span> + State.Filename);
    }
    <span class="kwrd">catch</span> (Exception ex)
    {
        AddMsg(Level.Verbose, <span class="str">"Problem opening SharePoint site"</span> + TempPath);
        AddMsg(Level.Debug, <span class="str">"Exception: "</span> + ex.Message + <span class="str">"\n"</span> + ex.StackTrace);
    }
}
<span class="rem">//This is the last block so go ahead and setup to delete state</span>
StopListener(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Note the HashTable MetaDataTable line. Even though we are not setting any metadata values, I have left in HashTable code because it illustrates how this method allows you to code in the setting of metadata columns in a document library. For example, imagine that the SharePoint document library has a column called &#8220;DeviceType&#8221;. Your code could say, write the string &#8220;Cisco&#8221; or &#8220;Linksys&#8221; to the DeviceType column when the file is uploaded.
</p>
<p>So let&#8217;s try it out shall we?</p>
<p>Modify your console application to fix the path variable to a SharePoint doc library and then build the solution.&nbsp; </p>
<pre class="csharpcode">TFTPServer myTFTP = <span class="kwrd">new</span> TFTPServer();
myTFTP.AllowWRQ = <span class="kwrd">true</span>;
myTFTP.AllowWRQOverwrite = <span class="kwrd">true</span>;
myTFTP.Path = <span class="str">"http://tidemo/tftp/backups"</span>;
myTFTP.StartListener(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Test the solution and you get a fairly unexciting console window.
</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image38.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb38.png" width="644" border="0"/></a> </p>
<p>Now we attempt an upload.</p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s </font>
</p>
<p><font face="Courier">[snip it all working swimmingly]</font></p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image39.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="266" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb39.png" width="644" border="0"/></a> </p>
<p>Also, this time around, none of the locking/access errors <a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">seen</a> with the WEBDAV based methods &#8211; WOHOO!. Running this as a service also works fine, using the same freeware utility I used in the last post (<a href="http://www.kcmultimedia.com/smaster/">ServiceInstaller</a> ). Just compile the solution and then use ServiceInstaller as I described for TFTPD32 in the <a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">previous post</a>.</p>
<p>Remember what I said before though, the &#8220;tftp service&#8221; account MUST have the following privileges on the server: </p>
<ul>
<li>The user is a server farm administrator.
</li>
<li>The user has Read and Write permissions on the content database.
</li>
<li>The user is a site collection administrator.
</li>
<li>The user has permissions to access the Windows SharePoint Services site or the SharePoint Server 2007 site through which the code iterates.</li>
</ul>
<p>Read more at KB Article <a href="http://support.microsoft.com/kb/935751">935751</a>, but the fundamental issue is that we are not running this code as the IIS process, but rather a separate user account. <em>&#8220;If code is executed from a custom Windows-based application or from a custom console application, the code path does not use the Web context that is hosted by the Microsoft Internet Information Services (IIS) application pool. Therefore, specific user permissions are required in SharePoint Server 2007 and in the back-end data source&#8221;</em></p>
<h2>Conclusion</h2>
<p>The requirement for administrator level privileges sucks. It is not a showstopper, but it sucks nonetheless. So the next post, we will turn our attention to the Webservices methods of uploading data and see if they are any better. Then (finally!) we will get onto more interesting topics like making use of workflow and integrating it with other useful information.</p>
<p>If you are wondering whether you can download my changes and test for yourself, not yet <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . I&#8217;m going to contact the author of the TFTPUtil project first, and I have to perform more debugging <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . So right now you will have to do it yourself.</p>
<p>Thanks for reading.</p>
<p>Paul</p>
<p><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/&title=SharePoint+for+Cisco+Fanboys+%28and+developers%29+-Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/&title=SharePoint+for+Cisco+Fanboys+%28and+developers%29+-Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/&title=SharePoint+for+Cisco+Fanboys+%28and+developers%29+-Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/&title=SharePoint+for+Cisco+Fanboys+%28and+developers%29+-Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco Fanboys (darn WEBDAV) &#8211; Part 2</title>
		<link>http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 15:03:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[WEBDAV]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/</guid>
		<description><![CDATA[Here I am back again, illustrating some of the interesting possibilities that SharePoint offers for Cisco people. To recap my last post, I showed you a little perl script I wrote to get an IOS router or switch to dump its current configuration to a TFTP server. I then used one of several freeware TFTP [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image11.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 20px 15px 0px; border-right-width: 0px" height="244" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb11.png" width="76" align="left" border="0"/></a>Here I am back again, illustrating some of the interesting possibilities that SharePoint offers for Cisco people.</p>
<p>To recap my <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">last post</a>, I showed you a little perl script I wrote to get an IOS router or switch to dump its current configuration to a TFTP server. I then used one of several freeware TFTP servers to show how you can have a TFTP server save the captured file into a version enabled document library.</p>
<p>I then hit a snag in relation to using a Windows Service to do this task. In this article we will delve into this issue in more detail. In addition, I ended up delving much deeper than I intended. So, like my branding series, this is going to turn into a multi-part series too, covering some application development, configuration, security and governance issues. How many parts it will end up being is anybody&#8217;s guess!</p>
<p>This is a technically oriented series of articles for the most part, so for you people who like the <a href="http://www.cleverworkarounds.com/2007/11/25/learn-to-talk-to-your-cfo-in-their-language-part-2/">governance</a> and <a href="http://www.cleverworkarounds.com/2007/11/17/learn-to-talk-to-your-cfo-in-their-language-part-1/">finance</a> stuff, you may not get too much out of this one. Although this article (part 2) focuses on my issues and observations with the Windows WEBDAV client, if you are one of these people who have &#8216;special&#8217; feelings when you see those pretty blue Cisco boxes like the image above, then you may find some useful content here. <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>SharePoint developers and architects may also find this of interest.</p>
<p><span id="more-382"></span></p>
<p>Now I previously mentioned that I tried three TFTP servers in writing this article and had some problems. They were:</p>
<ul>
<li><a href="http://www.tftp-server.com/">WinAgents TFTP</a> (Commercial)  </li>
<li><a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds TFTP Server</a> (Freeware &#8211; Registration required)  </li>
<li><a href="http://tftpd32.jounin.net/">TFTPD32 TFTP Server</a> (Freeware)</li>
</ul>
<p>And let&#8217;s not forget good old <a href="http://kin.klever.net/pumpkin/">PUMPKIN</a>, just to make one of my CCIE friends, who read the first post and suggested I use it as an alternative, happy (although he forgets that years ago I was the one who told him about Pumpkin in the first place <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p>Let&#8217;s review their capabilities and cover the issues encountered with each. As we go, we will get to see the uglier side of WEBDAV.</p>
<h2>WinAgents TFTP</h2>
<p>I&#8217;ve used this product several times in the past. At the time it was pretty much the only product that would natively run as a Windows service. It is not free, but buying it won&#8217;t exactly break the bank. It has a nice GUI, good logging and the ability to set up virtual folders to different underlying locations. Below is the main configuration screen and the screen where multiple locations can be configured.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image12.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="337" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb12.png" width="404" border="0"/></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image13.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="202" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb13.png" width="397" border="0"/></a> </p>
<p>You would think that the above ability to virtualise folders would make this product an obvious choice for front-ending to SharePoint, because it could co-exist with native filesystem, <a href="http://www.microsoft.com/windowsserver2003/technologies/storage/dfs/default.mspx">DFS</a> and 3rd party SMB based resources like those provided by <a href="http://us1.samba.org/samba/">samba</a>.</p>
<p>You would be right, but the latest version is let down by one stupid design flaw. When you send a file to a WinAgents TFTP server that already exists, it will <strong>delete </strong>the original file and then copy the new file to the virtual folder. It may on the surface seem no different to simply overwriting a file &#8211; but there is a big difference in a SharePoint site. </p>
<p>All files in a SharePoint document library have a unique ID. It is a built-in column and can be made visible by modifying a document library view as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image14.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="105" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb14.png" width="244" border="0"/></a>&nbsp; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image15.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="173" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb15.png" width="244" border="0"/></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image16.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="103" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb16.png" width="644" border="0"/></a> </p>
<p>By deleting the file in SharePoint, that file is now put into the recycle bin. When you upload a file of the same name, SharePoint treats it as a <strong>new file</strong> and allocates it a <strong>new ID</strong>. Therefore, there is no version history at all. Each upload is deleting the previous version and uploading a new file.</p>
<p>This obviously blows away any potential to use WinAgents TFTP as a SharePoint integrated TFTP server <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> .</p>
<p><strong>CleverWorkarounds Rating: They probably thought it was a good idea at the time.</strong></p>
<h2>Solarwinds</h2>
<p>So instead, let&#8217;s now turn our attention to the SolarWinds TFTP product. This one is free and also very easy to use. Like the WinAgents product, it can be run as a service out of the box, but it is not as comprehensive as its commercial competitor in terms of logging, granular security filtering and folder virtualisation. </p>
<p>Unlike its commercial cousin, however, it does not delete files before uploading, and therefore plays nice with SharePoint version control. That, combined with natively running as a windows service, makes it the obvious contender to be the SharePoint TFTP server of choice.</p>
<p>The GUI is basic yet functional. There is a status screen and a configuration screen that allows you to set the TFTP Root directory as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image17.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="198" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb17.png" width="484" border="0"/></a>&nbsp;</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image18.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="252" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb18.png" width="354" border="0"/></a> </p>
<p>In the screen-shot above, you will notice that the TFTP Server root directory is <a href="file://\\tidemo\tftp\backups">\\tidemo\tftp\backups</a>. As I explained in the first post, this is the WEBDAV UNC equivalent of the SharePoint site <a href="http://tidemo/tftp">http://tidemo/tftp</a> and the document library called backups.</p>
<p>If you recall in the <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">first post</a>, we created a user account called &#8216;tftp service&#8217;. This account has been granted access to the <a href="http://tidemo/tftp/backups">http://tidemo/tftp/backups</a> library. So, we need to set the credentials of the WinAgents TFTP service to run as that user. Therefore, when files are received by TFTP clients, the server will be able to write to the library. Below is my screen capture of my configured TFTP server.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image19.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="395" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb19.png" width="354" border="0"/></a>&nbsp;</p>
<p>There was one other task I also had to do to test this setup. SolarWinds is a little bit naughty in that it logs to its installation folder. (&#8216;tsk &#8216;tsk will never get a designed for XP gold logo). Being good practitioners of IT security, the &#8216;tftp service&#8217; account is a domain user with no system privileges, and only has READ access to this folder by default. Changing configuration parameters (such as the UNC TFTP root) also would not be saved, because the TFTP server would not be able to write to its own configuration file when running as the &#8216;tftp service&#8217; account..</p>
<p>So the permissions of the SolarWinds installation folder has been modified so that the &#8216;tftp service&#8217; account has WRITE access as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image20.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="319" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb20.png" width="454" border="0"/></a>&nbsp; </p>
<p>So I started the service fine, and ran a test! Wohoo we have our file!!</p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font>  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image5.png"><img height="145" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb5.png" width="700" border="0"/></a>  </p>
<p>So I tried it again a few times and hit a snag after some successful retries&#8230;  </p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="Courier">[snip many successful reattempts]</font></p>
<p><font face="Courier">C:\TFTP 192.168.134.129 put myfile.txt<br />Error on server : The process cannot access the file &#8216;\\tidemo\tftp\backups\myfile.txt&#8217; because it is being used by another process.<br />Connect request failed </font> </p>
<p>This was odd. Suddenly I was unable to copy a new version of the file to TFTP. I was running many repeat tests, so perhaps there was some sort of temporary file lock causing a problem? So I waited for a bit and then was able to transfer successfully again as shown below.  </p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>But it wasn&#8217;t long before I got another and more severe error.  </p>
<p><font face="Courier">C:\TFTP 192.168.134.129 put c:\myfile.txt<br />Error on server : The network path was not found. </font> </p>
<p><font face="Courier">Connect request failed </font> </p>
<p>The TFTP server log showed this error and ominous stack trace&#8230;  </p>
<p><font face="Courier">2008-01-23 21:49:53,102 [6] WARN&nbsp; TFTPServer.Service.TransmissionPut &#8211; Exception caught while trying to open file for reading.<br />System.IO.IOException: The network path was not found. </font> </p>
<p><font face="Courier">&nbsp;&nbsp; at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)<br />&nbsp;&nbsp; at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)<br />&nbsp;&nbsp; at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)<br />&nbsp;&nbsp; at TFTPServer.Service.TransmissionPut.Begin(RequestPacket firstPacket)</font>  </p>
<p>Network path not found? What the hell was going on here? It worked a minute ago!  </p>
<p>Eventlogs came up blank, and I tried an IISRESET. Still no-go. Restarted the TFTP service and I was able to transfer again. However, it didn&#8217;t take long for the problem to re-appear.  </p>
<p>I tried all of the suggestions on Mark Muller&#8217;s <a href="http://blogs.tamtam.nl/mart/SharepointExplorerViewProblems.aspx">blog article</a> with no success.  </p>
<p>I found two sites of interest and one seemed close to this issue. The first was <a href="http://www.codeprof.com/dev-archive/184/328-1203-1847682.shtm">here</a>, where a developer was having the identical problem, and a Microsoft employee suggested not to rely on WEBDAV &#8220;especially when using services&#8221;. The second one was a confidence building quote from Microsoft themselves. They made an admission in their <a href="http://www.microsoft.com/downloads/details.aspx?familyid=c523ac7a-5724-48be-b973-641e805588f4&amp;displaylang=en">WEBDAV Whitepaper</a> regarding the Web Client service. &#8220;The Web Client Service in Windows XP and Windows Server 2003 does not function correctly if you stop it then start it again without restarting the computer. <strong>Although a bug has been opened on this problem, the changes required to fix it are too large for a hotfix or a service pack and have therefore been delayed until a future major release of Windows&#8221;</strong>  </p>
<p>Are you freakin SERIOUS!?!  </p>
<p>Anyway, I decided that before I go off on a Microsoft bashing rant, I&#8217;d better double check that this problem was with SolarWinds TFTP or the obviously rock solid and stable WEBDAV client.  </p>
<p><strong>CleverWorkAround Rating (SolarWinds TFTP) &#8211; Judgement reserved till later</strong><br />
<h2>TFTPD32 TFTP Server</h2>
</p>
<p>TFTPD32 is more than just a TFTP server. It also provides DHCP, Syslog and SNTP services as part of the deal. Unlike the previous two TFTP servers, it does not run as a windows service out of the box, but it can be easily made to.</p>
<p>Cisco have also decided that this is their recommended TFTP server as well, not a bad endorsement, eh!</p>
<p>If we focus on the TFTP server functionality only, it is basically the same as SolarWinds <strong>without</strong> the windows service bit. So WinAgents still wins for overall ease of use and granularity but as discussed it was a waste of time with SharePoint.</p>
<p>Once again there is a main status screen, showing you current activity, as well as a configuration screen where you set the TFTP server root UNC path.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image21.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="294" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb21.png" width="354" border="0"/></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image22.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb22.png" width="343" border="0"/></a>  </p>
<p>So given that we had all of the WEBDAV stability problems with SolarWinds, this TFTP server allows us to test two scenarios. Since it can be run as standalone, we can run it interactively as our &#8216;tftp service&#8217; account and test it. Then, we can use a 3rd party tool to make it run as a Windows Service, and compare notes.  </p>
<p>So first up, let&#8217;s run it interactively as rtftp service&#8217; account. This is achieved by RIGHT clicking on the TFTPD32.EXE file and choosing RUN-AS from the menu options. When prompted, enter the credentials of the &#8216;tftp service&#8217; account.  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image23.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="180" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb23.png" width="244" border="0"/></a>&nbsp; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image24.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="199" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb24.png" width="244" border="0"/></a>  </p>
<p>If you want absolute assurance that TFTPD32.EXE is being run by the &#8216;tftp user&#8217; then look for the process in &#8220;task manager&#8221; and check the &#8220;User Name&#8221; column.  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image25.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="272" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb25.png" width="498" border="0"/></a>  </p>
<p>So, here we go!  </p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="Courier">[snip many successful reattempts]</font></p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>Now occasionally I received the error below, but unlike when using SolarWinds, running as a windows service using &#8216;ttp service&#8217; user credentials, it would always happen once and subsequent attempts would be fine.  </p>
<p><font face="Courier">C:\TFTP 192.168.134.129 put myfile.txt<br />Error on server : Access violation<br />Connect request failed</font>  </p>
<p>Just to prove that it was much more reliable, we now look at the version history in SharePoint for the file myfile.txt  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image26.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="289" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb26.png" width="545" border="0"/></a>  </p>
<p><strong>CleverWorkArounds Rating: Not flawless, but reliable</strong>  </p>
<p>So we have ascertained that running TFTPD32 works pretty well when run interactively as &#8216;tftp service&#8217; . Now we have to run TFTPD32 as a service and compare <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
<h3></h3>
<h2>TFTPD32 as a windows service</h2>
</p>
<p>There are many utilities out there to run a regular EXE file as a Windows Service. One of the most popular ones is SVRANY from the Windows 200x resource kit. However I used the freeware <a href="http://www.kcmultimedia.com/smaster/">ServiceInstaller</a> because it had a nice GUI <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Using it is mind numbingly simple. Run the application and fill in the form as shown below and click the &#8216;Install&#8217; button. Once installed, you can then change the service credentials to &#8216;tftp service&#8217; the same way we did it for SolarWinds.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image27.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="224" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb27.png" width="244" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image28.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="152" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb28.png" width="304" border="0"/></a></p>
<p>Start the service, and check in Task manager that TFTPD32.EXE is running. (When running as a service you will not see the status screen).</p>
<h2>The moment of Truth!</h2>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="Courier">[snip many successful reattempts]</font></p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>Like when running interactively, I still received the occasional&nbsp; &#8216;Access Violation&#8217; error but always recovered. Again to prove that I ran lots of TFTP commands, the version history is now up to 204 <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image29.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="234" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb29.png" width="483" border="0"/></a>  </p>
<p><strong>CleverWorkArounds Ratings (TFTPD32 as a service) &#8211; The best of the WEBDAV TFTP bunch</strong>  </p>
<p><strong>CleverWorkArounds Ratings (SolarWInds) &#8211; Looks like it might be part your fault after all!</strong>  </p>
<p><strong>CleverWorkArounds Ratings (WEBDAV) &#8211; It&#8217;s definitely your fault!</strong>  </p>
<p><strong></strong>&nbsp;<br />
<h2>Conclusion</h2>
</p>
<p>So after these tests, it seems that running TFTPD32 as a Windows Service is no less reliable than running it interactively. Perhaps then there is an issue with the way that SolarWinds use the windows networking API&#8217;s to write files. SolarWinds is a .NET application and TFTPD32 isn&#8217;t. Therefore, they may well be using different API&#8217;s under the hood.</p>
<p>I wasn&#8217;t satisfied with all of this though. Although we have achieved our goal of TFTP to a version controlled document library, the whole unreliable WEBDAV thing left me with a bad taste and I decided to go down a different path. What more could I do, you ask? How about write my own TFTP server? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>The <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">next</a> 2 posts in this series will cover getting TFTP files into SharePoint via *non* WEBDAV methods. We will examine their reliability and examine a little of SharePoint web services and the SDK. </p>
<p>The fifth article will leave the issues of getting the files *into* SharePoint, and instead focus on what we can do with them once they are there! (Workflows, metadata and the like). </p>
<p>The final article (I suspect it will be the final anyway but i won&#8217;t know &#8217;til I write the next two), will tie it all together in terms of governance. Thus, it will be a little similar to the branding series where the last article was largely non technical in focus and audience.</p>
<p>I hope you&#8217;ve enjoyed this little journey and didn&#8217;t find it too pointless <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/&title=SharePoint+for+Cisco+Fanboys+%28darn+WEBDAV%29+%26%238211%3B+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/&title=SharePoint+for+Cisco+Fanboys+%28darn+WEBDAV%29+%26%238211%3B+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/&title=SharePoint+for+Cisco+Fanboys+%28darn+WEBDAV%29+%26%238211%3B+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/&title=SharePoint+for+Cisco+Fanboys+%28darn+WEBDAV%29+%26%238211%3B+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco Fanboys &#8211; Part 1</title>
		<link>http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 00:15:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[WEBDAV]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/</guid>
		<description><![CDATA[Cisco nerds! This series is just for you! I know that you think you&#8217;re way too cool for collaborative portals, especially a Microsoft one at that. Instead you are more interested in delving into the IOS command line, to perform arcane arts such as debugging that OSPF route redistribution into BGP or getting off on [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><iframe style="border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none" border="0" marginwidth="0" marginheight="0" src="http://rcm.amazon.com/e/cm?t=cleverwo-20&amp;o=1&amp;p=13&amp;l=st1&amp;mode=books&amp;search=cisco&amp;fc1=000000&amp;lt1=&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" width="468" scrolling="no" height="60"></iframe></p>
<p>Cisco nerds! This series is just for you! I know that you think you&#8217;re way too cool for collaborative portals, especially a Microsoft one at that. Instead you are more interested in delving into the IOS command line, to perform arcane arts such as debugging that <a href="http://en.wikipedia.org/wiki/Open_Shortest_Path_First">OSPF</a> route redistribution into <a href="http://en.wikipedia.org/wiki/Border_gateway_protocol">BGP</a> or getting off on planning and implementing a large scale <a href="http://en.wikipedia.org/wiki/Dmvpn">DMVPN</a> solution. Maybe you&#8217;re into <a href="http://en.wikipedia.org/wiki/Quality_of_service">QOS</a> and VOIP and simply dig all of those <a href="http://en.wikipedia.org/wiki/Differentiated_services">DSCP-COS</a> mappings, class and policy maps and the like.</p>
<p>Although packets, cells and frames are your world, *nix is cool, <a href="http://www.nagios.org/">Nagios</a> is your idea of a portal and anything remotely connected to Microsoft fills you with contempt and is beneath you right? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Well if this is you, I do understand your point of view because I was you once, but after some therapy, I&#8217;m now out of rehab and doing just fine!</p>
<p>Having Cisco/general networking expertise will help you with this article, so depending on who you are, the amount of caffeine required to follow this will vary:</p>
<p>CleverWorkArounds Coffee requirement rating (for a CCNP or CCIE): <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image7.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb7.png" width="25" border="0"/></a>&nbsp;</p>
<p>CleverWorkArounds Coffee requirement rating (for a non Cisco person or CCNA <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ): <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image8.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb8.png" width="25" border="0"/></a>&nbsp; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image9.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb9.png" width="25" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image10.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb10.png" width="25" border="0"/></a></p>
</p>
<p><span id="more-335"></span></p>
<p>Okay Cisco gurus, if there is anything about SharePoint that you guys need to know about, it is the power of the document library.</p>
<p>Unlike a regular file system, a SharePoint document library has a powerful version control mechanism that can make your life easier, as well as play nice with the rest of your colleagues (whom you despise because they don&#8217;t understand or appreciate you <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>So I am first going to show you an example of how you can leverage SharePoint to do something quite useful with Cisco gear, and then in the next post of this series I will expand further into general IT infrastructure admin benefits.</p>
<h2>The Cisco bit..</h2>
<p>(Non Cisco people, your eyes will glaze over &#8211; but try anyway!)</p>
<p>Back around 2000/2001 when I was a full time network manager, I wrote a perl script that used <a href="http://en.wikipedia.org/wiki/SNMP">SNMP</a> to instruct a router to dump its configuration to a TFTP server. I had a <a href="http://en.wikipedia.org/wiki/Cron">cron</a> job that ran this script daily, and it would tell all of our switches and routers to write their current configuration to TFTP. It was nothing special &#8211; many Cisco network professionals do the same thing.</p>
<p>(Before you ask, I *know* there are tools and new methods to do this nowadays, but back then the choices were more limited)</p>
<p>Anyway, here is a snippet of the script in question. I know it&#8217;s not great but it did the job&#8230;</p>
<p><font face="Courier">use Net::SNMP; </font></p>
<p><font face="Courier">($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;<br />@Days = (&#8220;Sunday&#8221;, &#8220;Monday&#8221;, &#8220;Tuesday&#8221;, &#8220;Wednesday&#8221;, &#8220;Thursday&#8221;, &#8220;Friday&#8221;, &#8220;Saturday&#8221;);<br />$day = $Days[$wday];</font></p>
<p><font face="Courier"># Now call the procedure to do the deed!<br />&amp;backup_configs(&#8220;192.168.16.1&#8243;,&#8221;RWSNMPcommunity&#8221;);<br />&amp;backup_configs(&#8220;192.168.16.2&#8243;,&#8221;RWSNMPcommunity&#8221;);</font></p>
<p>The above code simply grabbed the date and then called the main function, passing the IP of the router and the SNMP community string for Read/Write access. The routine below, used SNMP SET commands to tell the router the location of the TFTP server, the name of the configuration file being written, and then told the device to execute the request.</p>
<p><font face="Courier">sub backup_configs {<br />&nbsp;&nbsp;&nbsp; ($ipaddr, $cs) = @_;<br />&nbsp;&nbsp;&nbsp; ($s, $error) = Net::SNMP-&gt;session( -hostname&nbsp; =&gt; $ipaddr,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -community =&gt; $cs,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -debug =&gt; &#8217;1&#8242; ); </font></p>
<p><font face="Courier">&nbsp;&nbsp;&nbsp; $hnh = $s-&gt;get_request(&#8220;.1.3.6.1.2.1.1.5.0&#8243;);<br />&nbsp;&nbsp;&nbsp; $hostname = $hnh-&gt;{&#8220;.1.3.6.1.2.1.1.5.0&#8243;}; </font></p>
<p><font face="Courier">&nbsp;&nbsp;&nbsp; $filename = &#8220;\\router-configs\\&#8221; . $day . &#8220;\\&#8221; . $hostname . &#8220;.cfg&#8221;;<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.2.667&#8243;, INTEGER, 1);<br />&nbsp;&nbsp;&nbsp; # Set the source to startup-config<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.3.667&#8243;, INTEGER, 4);<br />&nbsp;&nbsp;&nbsp; # Set the destination to tftp<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.4.667&#8243;, INTEGER, 1);<br />&nbsp;&nbsp;&nbsp; # Set TFTP IP Address<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.5.667&#8243;, IPADDRESS,&#8221;192.168.18.5&#8243;);<br />&nbsp;&nbsp;&nbsp; # Set destination file name<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1x.1.6.667&#8243;, OCTET_STRING,&#8221;$filename&#8221;);<br />&nbsp;&nbsp;&nbsp; # Set it off!<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.14.667&#8243;, INTEGER, 1);<br />&nbsp;&nbsp;&nbsp; $done = false;<br />&nbsp;&nbsp;&nbsp; $counter = 0;<br />&nbsp;&nbsp;&nbsp; while ($done eq false) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $check = $s-&gt;get_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.10.667&#8243;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($check-&gt;{&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.10.667&#8243;} == 3) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $done = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $counter++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($counter &gt; 500) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $done = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; if ($counter &gt; 500) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#8220;$date:A problem occured &#8211; it looks like the attempt failed\n&#8221;;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; # Clear the config!\n&#8221;;<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.14.667&#8243;, INTEGER, 6);<br />&nbsp;&nbsp;&nbsp; #close the snmp session<br />&nbsp;&nbsp;&nbsp; $s-&gt;close; </font></p>
<p><font face="Courier">}</font></p>
<p>Now, I know there is a lot of ugly SNMP stuff in my above code and many readers are thinking, WTF!? You can safely ignore most of the code. However there is one bit that I do want to bring your attention to.</p>
<p><font face="Courier">&nbsp;&nbsp;&nbsp; $hostname = $hnh-&gt;{&#8220;.1.3.6.1.2.1.1.5.0&#8243;}; </font></p>
<p><font face="Courier">&nbsp;&nbsp;&nbsp; $filename = &#8220;\\router-configs\\&#8221; . $day . &#8220;\\&#8221; . $hostname . &#8220;.cfg&#8221;;<br /></font></p>
<h6><font face="Courier"></font></h6>
<p>Looking closely at this, you can see that I am setting the filename based around the name of the Cisco device (retrieved from SNMP) and the day of the week the script is run ($day). This is because when I backed up the configuration of the router, I wanted to keep multiple versions. For simplicity, I opted to keep 7 days worth of configuration dumps. So by using the day of the week in the file path, I ended up with config backups like this.</p>
<ul>
<li>router-configs/monday/mycorerouter.cfg  </li>
<li>router-configs/monday/myedgerouter.cfg  </li>
<li>router-configs/tuesday/mycorerouter.cfg  </li>
<li>router-configs/tuesday/myedgerouter.cfg </li>
</ul>
<p>So, provided the path router-configs/&lt;day of the week&gt; exists on my TFTP box, I end up with a single file for each cisco device in each day of the week directory.</p>
<p>Neat, eh?</p>
<p>&nbsp;</p>
<h2>Yeah it&#8217;s neat, so why integrate TFTP with SharePoint?</h2>
<p>Version control and workflow, my skeptical Cisco friends, that&#8217;s why! The easiest way to explain is to dive right into an example. So let&#8217;s do that right now!</p>
<p>There are a few TFTP servers out there for Windows (yeah we are using Windows &#8211; get over it). I <strong>used</strong> to use <a href="http://www.tftp-server.com/">WinAgents</a> TFTP server. Unfortunately though in writing this article, the most recent version of WinAgents TFTP does not work with SharePoint the way I want it to (if you run an older version it is fine). I also tried using <a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds</a> freeware (registration required) TFTP server as it runs as a windows service. Unfortunately, I had some stability problems with WEBDAV when running as a service (not SolarWinds fault) which I will explain in the next post, so I ended up using <a href="http://tftpd32.jounin.net/">TFTPD32</a> with a few modifications. (TFTPD32 is <a href="http://www.cisco.com/en/US/products/hw/routers/ps133/products_tech_note09186a00801f7735.shtml">recommended by Cisco</a> anyway).</p>
<p>What we will do is the relatively simple process of telling the TFTP server to drop files into a SharePoint document library via WEBDAV.</p>
<p><em>For reference, the TFTP server does not have to be on the same server as SharePoint when using the WEBDAV method. </em></p>
<p>The TFTPD32 Server Installation is straightforward. Once installed however, there are three additional steps that you need to perform:</p>
<ul>
<li>Create or nominate a user account to run the TFTP Service.  </li>
<li>Modify TFTP32 to run as a WIndows Service &#8211; using the credentials of a user account that has permissions to the document library that the TFTP server will dump the files to.  </li>
<li>Set the TFTP root directory to the UNC path of the SharePoint document library </li>
</ul>
<p>I am assuming that you already have a SharePoint or WSS server. On the SharePoint side, we need to create a site and a document library to hold our configuration backups, grant the TFTP server permission to it and then enable version control on that document library.</p>
<p>So in my example, the user account that is going to upload files to SharePoint is called &#8220;<strong>tftp service</strong>&#8220;. I will refer to this account frequently in the rest of this post.</p>
<p>Also in this example, the SharePoint site is <strong>http://tidemo/tftp</strong> and the document library is called &#8220;<strong>backups</strong>&#8220;</p>
<p><strong><a href="http://tidemo/tftp/backups">http://tidemo/tftp/backups</a></strong></p>
<p><strong></strong>&nbsp;</p>
<h2>Configuring SharePoint</h2>
<p>&nbsp;</p>
<p>(SharePoint people, I am covering the basics here &#8211; skip if you know it already).</p>
<p>In SharePoint, create a new, blank site to host the TFTP server files. Being a bastion of originality, in the example below I have named the site TFTP.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0025.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="351" alt="clip_image002[5]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0025-thumb.jpg" width="351" border="0"/></a></p>
<p>&nbsp;</p>
<p>Now that the site has been created, we create a document library to store the files for the TFTP server. I have called it &#8220;Backups&#8221; and chosen not to use a default document template.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0027.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="410" alt="clip_image002[7]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0027-thumb.jpg" width="355" border="0"/></a></p>
<p>&nbsp;</p>
<p>The next step, having created this document library, is to turn on version control. This is performed by choosing &#8220;document library settings&#8221; from the &#8220;Actions&#8221; menu.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0029.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="124" alt="clip_image002[9]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0029-thumb.jpg" width="244" border="0"/></a><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00211.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="125" alt="clip_image002[11]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00211-thumb.jpg" width="360" border="0"/></a></p>
<p>&nbsp;</p>
<p>In the version settings screen, choose to create major versions.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00213.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="241" alt="clip_image002[13]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00213-thumb.jpg" width="367" border="0"/></a></p>
<p>&nbsp;</p>
<p>Finally, we need to grant our user &#8220;tftp service&#8221; write access to this new document library. The simplest way to do this is add &#8220;tftp service&#8221; to the members&#8217; group of the SharePoint site. This will grant them &#8216;contribute&#8217; access to the &#8220;Backups&#8221; document library. (This permission setting is just for demonstration purposes. Adjust permissions according to your specific requirements)</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="178" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb2.png" width="387" border="0"/></a>&nbsp;</p>
<p>&nbsp;</p>
<p>Right! Our doc library is ready! If at this point you open the document library via Windows Explorer as shown below, you will see that the UNC equivalent path for this example document library is <a href="file://\\TIDEMO\TFTP\BACKUPS">\\TIDEMO\TFTP\BACKUPS</a></p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00215.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="151" alt="clip_image002[15]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00215-thumb.jpg" width="244" border="0"/></a></p>
<p>&nbsp;</p>
<p>If you do not see your standard windows explorer window here and a UNC path, stop here! We need to troubleshoot the windows WEBDAV service. It might pay for you to skip to the &#8220;WEBDAV interlude section coming up)</p>
<p>One thing that people often overlook with SharePoint is that document libraries have this &#8220;windows explorer&#8221; view. What is so significant about this, you ask? It is the fact that you can reach <strong>any </strong>SharePoint document library via a UNC path. You can even map a drive to a SharePoint library too. Thus the following document library:</p>
<p><strong>http://tidemo/tftp/backups</strong></p>
<p>is accessible via</p>
<p><strong>\\tidemo\tftp\backups</strong></p>
<p>As a result of this functionality, pretty much any application that deals with UNC and mapped drives (such as ROBOCOPY) can happily copy files from your PC to a SharePoint library (with a large caveat I will explain later).</p>
<p>For educational purposes, let&#8217;s look at how windows explorer view is done. (If you are not interested, skip to the next heading where we configure SolarWinds TFTP.)</p>
<h2>How is this done? A WEBDAV interlude</h2>
<p>Now SharePoint does not actually provide support for <a href="http://en.wikipedia.org/wiki/Server_message_block">SMB</a> which is what &#8216;regular&#8217; shared file systems use. The protocol that SharePoint supports is <a href="http://www.webdav.org/specs/rfc4918.html">WEBDAV</a> which stands for &#8220;Web-based Distributed Authoring and Versioning&#8221;. So, how is it that we can use Windows explorer, mapped drives and UNC paths to get to SharePoint files?</p>
<p>In Windows XP and above, Microsoft supplied a new network provider called the Windows WebDav client. (Yes, XP and above &#8211; Windows 2000 is not going to work this way for you). <em>Also, Samba people who are reading this and thinking &#8220;ooh I can use smbfs to mount a SharePoint library to *nix&#8221;, sorry it ain&#8217;t gonna work because it is not SMB.</em></p>
<p>By creating the Web Client Service as one of the built-in network providers, it is automatically queried whenever you make connection attempt to a network resource (i.e. opening Windows explorer and navigating to a mapped drive or UNC path). You can see the provider by following these steps:</p>
<ul>
<li>On the <b>Start</b> menu, right-click <b>My Network Places</b> and then click <b>Properties</b>.  </li>
<li>On the top menu bar, click <b>Advanced</b> and then click <b>Advanced Settings</b>.  </li>
<li>Click the <b>Provider Order</b> tab. </li>
</ul>
<p>You will see a dialog box with your provider order listed. Note that the Web Client Network (WebDAV) is last in the list by default.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image002.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="459" alt="clip_image002" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image002-thumb.jpg" width="408" border="0"/></a></p>
<p>&nbsp;</p>
<p>Microsoft have a detailed <a href="http://www.microsoft.com/downloads/thankyou.aspx?familyId=c523ac7a-5724-48be-b973-641e805588f4&amp;displayLang=en">whitepaper</a> on how Windows Explorer view is implemented, and it is well worth a read. (I&#8217;ve previously <a href="http://www.cleverworkarounds.com/2007/10/15/poor-windows-explorer-view-performance-in-sharepoint/">blogged</a> on quirks with it before.)</p>
<p>&nbsp;</p>
<h2>TFTP to SharePoint</h2>
<p>So, now we know that on XP and above, any application that uses the windows networking API (interpret that as refer to a mapped drive or UNC path), can get data into and out of SharePoint. So let&#8217;s run the TFTPD32 and set it to use our document library.</p>
<p>&nbsp;</p>
<h3>Configuring TFTPD32</h3>
<p>First up, grab TFTP32 and install it onto your chosen server. After successful installation run TFTP32.EXE from the installation directory.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image3.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="341" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb3.png" width="405" border="0"/></a></p>
<p>&nbsp;</p>
<p>Click OPTIONS and now set the path to the Windows explorer view path (UNC) of your site and document library</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image4.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="110" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb4.png" width="368" border="0"/></a></p>
<p>&nbsp;</p>
<p>That is pretty much it! Now let&#8217;s test it!</p>
<p>Unfortunately, I don&#8217;t have any spare Cisco gear handy as Uncle Ebay helped me dispose of them once I stopped doing networking. So instead, I will use the built in TFTP.EXE utility built into Windows. This proves that a file can be saved to SharePoint via TFTP.</p>
<p>It works like this.</p>
<p>TFTP &lt;hostname or IP&gt; GET|PUT &lt;filename&gt;</p>
<p>eg</p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font></p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>&nbsp;</p>
<p>The output of the above command shows &#8220;transfer successful&#8221;. So let&#8217;s go and have a peek in our document library!</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image5.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="161" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb5.png" width="775" border="0"/></a></p>
<p>Sweeeet, we have a file called &#8220;myfile&#8221;.</p>
<p>So let&#8217;s go back to TFTP and re-run the command a few times.</p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font></p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="Courier">[snip many re-executes]</font></p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font></p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>&nbsp;</p>
<p>Now let&#8217;s take another gander in the document library. Still the one file there. However, let&#8217;s now examine the version history for the file and see if there are multiple versions?</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image6.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="307" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb6.png" width="614" border="0"/></a></p>
<p>Sweeet, we now see that there are 7 versions stored for this file!</p>
<p>&nbsp;</p>
<h2>Conclusion (and the catch&#8230;)</h2>
<p>So imagine that every day, you use the perl script example above to instruct your networking gear to copy their configuration to TFTP. Now you can simply use a standard file name convention (such as &lt;hostname&gt;-config.txt) do not need to worry about folder structure or dates within filename to ensure that multiple versions are maintained. You can go into the version history for a particular router configuration file and retrieve the one that you need.</p>
<p>Of course, all of your other important documents such as your network diagrams, SOE documentation, maintenance and support agreement details can also be placed into SharePoint document libraries and many other benefits are derived in addition to version history, such as search, workflow and easy offline storage.</p>
<p>But that is for the next post <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Now for the catch &#8230; and it&#8217;s a biggie!</p>
<p>We of course, want to run our TFTP server as a windows service, so that the TFTP server does not have to be manually invoked.</p>
<p>Try as I might, I was unable to get a reliable TFTP service writing to SharePoint document library, when the TFTP server is running as a Windows Service! This majorly sucked and I was an unhappy camper!!</p>
<p>I have concluded that the WEBDAV client in WIn2003 is flakey. In the next post of this series, I will outline the problems that I had and how I eventually was able to come up with a semi-clever workaround to make it all work.</p>
<p>Bye for now!</p>
<p>Paul</p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/&title=SharePoint+for+Cisco+Fanboys+%26%238211%3B+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/&title=SharePoint+for+Cisco+Fanboys+%26%238211%3B+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/&title=SharePoint+for+Cisco+Fanboys+%26%238211%3B+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/&title=SharePoint+for+Cisco+Fanboys+%26%238211%3B+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>WIFI Security: Background, Risks and Mitigation Part 2</title>
		<link>http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/</link>
		<comments>http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 00:24:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[WIFI]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/</guid>
		<description><![CDATA[Like my posts on IT governance standards, I produced this training material some time back when I was doing a lot of IT security work. I&#8217;ve since moved onto other IT disciplines, but I hope that this article is of some use to those looking for an introduction to WIFI security. I have divided the [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->   <br />Like my posts on IT governance standards, I produced this training material some time back when I was doing a lot of IT security work. I&#8217;ve since moved onto other IT disciplines, but I hope that this article is of some use to those looking for an introduction to WIFI security. I have divided the material into two parts. The first half is <a href="http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/">background and theory</a>, and this post illustrates a practical example.</p>
<p>First up, let&#8217;s finish off a little theory to go with the first post.</p>
<p><span id="more-152"></span></p>
<h2>Other WIFI Security Measures</h2>
<p>WEP and the much improved WPA should not be considered alone. Security in general requires a holistic approach to determine what functionality the business requires, what techniques can be used to provide that functionality and then assurance of the security of those features. Below are two additional techniques regularly used in conjunction with WEP or WPA to improve the security of a WLAN.</p>
<h3>MAC Address Filtering</h3>
<p>A common feature available with wireless access devices is the means to restrict access to only wireless devices that have their network (MAC) address configured in a filter list. Therefore, any device that tries to authenticate with a MAC address not matching the list will be rejected.</p>
<p>This method is not foolproof. If traffic can be decrypted then a valid MAC address could be determined and used to access the network.</p>
<h3>Separate VLAN/DMZ for Wireless LAN</h3>
<p>Most medium to large networks utilise virtual LAN&#8217;s (VLAN&#8217;s) to separate IP networks into logical groupings for security, performance and management reasons. Most good quality layer 3 switches provide VLAN&#8217;s that allow you to define firewall rules or access lists to restrict what resources on the network that wireless networks clients can access.</p>
<p>For more protection, the wireless network can be placed behind a fully featured stateful firewall rather than a VLAN alone.</p>
<h2>WPA Wireless Clients Sample Implementation</h2>
<p>This section shows an example of implementing WPA Enterprise with PEAP. Three components are required.</p>
<ul>
<li>The supplicant (the WIFI client), </li>
<li>The Authenticator (the Access Point) and; </li>
<li>An Authentication Server (A Radius server such as Microsoft IAS Server). </li>
</ul>
<p>In this example the Access Point is a Cisco Aironet 1310 Series Outdoor Access Point/Bridge1 running IOS 12.3(7)JA.</p>
<p>In addition, since we are using PEAP, we need a suitable certificate server and we have used Microsoft Certificate Services.</p>
<p>Since we are using Microsoft IAS for Radius, which integrates with Active Directory, we have created 2 new Active Directory groups called &quot;Wireless Users&quot; and &quot;Wireless Computers&quot; respectively. These groups will be used to determine what computers and users are allowed access to the WIFI network. This ensures a high level of granularity for IT staff to manage access.</p>
<h3>Configuring IAS (RADIUS)</h3>
<p>IAS is a free component that is supplied with Win2k/Win2003 but is not installed by default. It can be installed via the Control Panel-&gt;Add/Remove Programs/Windows Components applet.</p>
<p>Both IAS and the authenticating access point need to be configured to perform Radius authentication. Firstly, you need to register IAS in Active Directory, so that IAS policies can be used on Active Directory users and computers to govern access.</p>
<p>In the left hand pane of the IAS management console, select Internet Authentication Service (Local) and right click to select the Register Server in Active Directory option.</p>
<p>If the server is already registered in active directory, this message will be shown</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit1.png" /><span style="font-family: tahoma">     <br /></span></p>
<h3>Adding the Access Point as a Radius Client</h3>
<p>In IAS, you create a new RADIUS client and enter a shared secret.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit2.png" /></p>
<h3>Adding the IAS Server as a Radius Server on the Access Point</h3>
<p>On the access point, the detail of the IAS server is entered.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit3.png" /></p>
<p>Next we need to configure the Access Point to accept WPA clients and authenticate them to Radius. To do this, we first set encryption to WPA/TKIP.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit4.png" /></p>
<p>Next we set the SSID to use Open Authentication <em>and</em> Network/EAP authentication. Network EAP is the better of the two, but Cisco have <a href="http://www.cisco.com/en/US/products/ps5861/products_configuration_guide_chapter09186a00804ed735.html">noted</a> that &#8216;Some non-Cisco Aironet client adapters do not perform 802.1x authentication to the access point/bridge unless you configure Open authentication with EAP.&#8217;</p>
<p>We have already configured the RADIUS server, so we just use the default list. Under Key Management, we set it to mandatory and choose WPA. Accounting can also be enabled, and log on and log off events will be sent to the RADIUS server.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit5.png" /></p>
<h3>Configuring a Digital Certificate for the IAS Server.</h3>
<p>If the server running IAS is already part of Active Directory, and there is a Certificate Server on the Active Directory Domain, the IAS server will already have a computer certificate installed. This can be verified using the Certificate Services MMC Span-In.</p>
<p>Open the Local Computer certificate store, choose Personal/Certificates and you should find a certificate matching the name of this computer. For example:</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit6.png" /></p>
<p>If you do not have a computer certificate, you need to obtain one via a certificate authority. This is not covered in this document.</p>
<h3>Configuring IAS Wireless Policy</h3>
<p>At this point we now need to configure the policy on the Radius server so that when a wireless device connects, the conditions that allow it to join the network are defined. The policies set will be to ensure the computer and user id supplied are members of the &quot;Wireless Users&quot; and &quot;Wireless Computers&quot; active directory groups.</p>
<p><strong>User Access     <br /></strong></p>
<p>The first policy to be created is for the user accounts that will be connecting to the wireless network. The wireless connection type will be defined and then the appropriate active directory security group will be specified.</p>
<p>In IAS Management console, create a new Remote Access Policy, select &quot;Set up a custom policy&quot; and enter &quot;WFIC Wireless User Access&quot; as the Policy name.</p>
<p>Now we add the conditions required for this remote access policy</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit7.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Select Client-IP-Address, Add the IP address of the Wireless Access Point and click Ok</p>
<p>Select Windows-Groups and then click Add. Enter the wireless user groups &quot;Wireless Users&quot; and &quot;Wireless Computers&quot; as described earlier and click OK</p>
<p>Now we have completed the conditions for using this wireless policy. Click Next and grant remote access permission.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit8.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Now we have to specify the PEAP settings. Click Profile</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit9.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Select the Advanced tab, highlight the Framed-Protocol (RADIUS Standard PPP) attribute and click Remove</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit10.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Select the Encryption tab</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit11.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Select the Encryption tab and remove all tick boxes, leaving only the Strongest Encryption (MPPE 128-bit) option ticked</p>
<p>Select the Authentication tab</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit12.png" /></p>
<p>Select the Authentication tab and click EAP Methods</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit13.png" /></p>
<p>Click Add to add an EAP type</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit14.png" /></p>
<p>Select PEAP and click OK. Now Click Edit to modify the PEAP type</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit15.png" /></p>
<p>Ensure that the certificate is the correct and ensure that MSCHAP is set as the EAP type</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit16.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Back on the Authentication tab remove all other tick box options then click OK</p>
<p>You may see a message asking if you would like to view the online help to follow and configure dial-in settings</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit17.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Click No and Next to continue. The wizard will now tell you the profile is complete and summarise the conditions and profile settings.</p>
<p><strong>Computer Policy     <br /></strong></p>
<p>Another policy can optionally be created for Domain Computers. The policy steps are identical to the steps outlined in the user policy except during the setting of policy conditions, you use the Active Directory group that the wireless computers are a member of.</p>
<p><strong>Granting Active Directory Rights     <br /></strong></p>
<p>The last step is to ensure that the user and computer accounts in Active Directory have rights to &#8216;dial in&#8217; &#8211; which is Microsoft&#8217;s term for using Radius Authentication.</p>
<p>A user account needs &quot;Control Access through Remote Access Policy&quot; set.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit18.png" /></p>
<p>A computer account needs the same setting.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit19.png" /></p>
<h3>Wireless Client Configuration Settings</h3>
<p>This section only deals with the configuration of Windows XP Clients</p>
<p><strong>Digital Certificate     <br /></strong></p>
<p>Using PEAP, the WIFI <strong>clients</strong> do not need to use a digital certificate. Only the server uses one to identify itself to the client. However, the clients need to <em>trust the certificate authority (CA) that issued the server certificate</em>. To do this, the certificate of the CA needs to be added to the trusted certificate list on the client.</p>
<p>If the computer is a member of the Active Directory Domain, the CA certificate is likely already installed. This can be checked using the same steps defined in the section &quot;Configuring a Digital Certificate for the IAS Server&quot; except you go to the &quot;Trusted Root Certification Authorities&quot; store to find the CA certificate.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit20.png" /></p>
<p>If the certificate is not installed and if the CA certificate Using Microsoft Certificate Services, it is easy to obtain and install it. The certificate can be installed by double clicking on the certificate file stored on a shared folder, floppy or USB device. Alternatively, the client can request the CA certificate from the CA website.</p>
<p><strong>Wireless Networking Configuration     <br /></strong></p>
<p>In the properties of the wireless network adapter, add a new wireless network, specifying WPA and TKIP</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit21.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>On the authentication tab, choose PEAP as the EAP type</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit22.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Click Properties and tick &#8216;validate server certificate&#8217; and ensure the CA that issued the server certificate is selected.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit23.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>If the certificate authority is not listed above, than this machine does not trust it and it needs to be added to the trust list as per section titled &quot;Digital Certificate&quot;</p>
<p>Ensure ERP-MSCHAPv2 is selected at the &#8216;select authentication method&#8217; list and click &#8216;properties&#8217;.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit24.png" /></p>
<p>This dialog box allows you to select if XP will attempt user authentication based on the currently logged in user, or prompt for credentials to be entered. If this workstation is a member of the domain, and the user logs into it via a domain account, this should be ticked.</p>
<p>Click OK and OK again to return to the Wireless network properties screen.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit25.png" /></p>
<p>If a computer authentication policy has been chosen as per section entitled &quot;Computer Policy&quot;, tick the &quot;Authenticate as computer when computer information is available&quot;.</p>
<p>At this point the wireless client should be able to connect to the wireless network if the user and computer credentials are valid. The event logs on the IAS server now will show detailed records of all wireless network authentication attempts including username, date/time, IAS policy used and whether access was granted or denied.</p>
<p>Below is a sample IAS log entry from an access point using the IP address 192.168.100.26 and an IAS policy called &quot;AP Test&quot;.</p>
<p><span style="font-family: courier new">Event Type:&#160;&#160;&#160; Information     <br /></span></p>
<p><span style="font-family: courier new">Event Source:&#160;&#160;&#160; IAS     <br /></span></p>
<p><span style="font-family: courier new">Event Category:&#160;&#160;&#160; None     <br /></span></p>
<p><span style="font-family: courier new">Event ID:&#160;&#160;&#160; 1     <br /></span></p>
<p><span style="font-family: courier new">Date:&#160;&#160;&#160;&#160;&#160;&#160;&#160; 20/01/2006     <br /></span></p>
<p><span style="font-family: courier new">Time:&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4:45:07 PM     <br /></span></p>
<p><span style="font-family: courier new">User:&#160;&#160;&#160;&#160;&#160;&#160;&#160; N/A     <br /></span></p>
<p><span style="font-family: courier new">Computer:&#160;&#160;&#160; MYSERVER     <br /></span></p>
<p><span style="font-family: courier new">Description:     <br /></span></p>
<p><span style="font-family: courier new">User DOMAIN\some guy was granted access.     <br /></span></p>
<p><span style="font-family: courier new">Fully-Qualified-User-Name = domain.net/MY Company/DOMAIN/Some Guy     <br /></span></p>
<p><span style="font-family: courier new">NAS-IP-Address = 192.168.100.26     <br /></span></p>
<p><span style="font-family: courier new">NAS-Identifier = bridge     <br /></span></p>
<p><span style="font-family: courier new">Client-Friendly-Name = AP Test     <br /></span></p>
<p><span style="font-family: courier new">Client-IP-Address = 192.168.100.26     <br /></span></p>
<p><span style="font-family: courier new">Calling-Station-Identifier = 0013.ff10.427c     <br /></span></p>
<p><span style="font-family: courier new">NAS-Port-Type = Wireless &#8211; IEEE 802.11     <br /></span></p>
<p><span style="font-family: courier new">NAS-Port = 282     <br /></span></p>
<p><span style="font-family: courier new">Proxy-Policy-Name = Default Connection     <br /></span></p>
<p><span style="font-family: courier new">Authentication-Provider = Windows     <br /></span></p>
<p><span style="font-family: courier new">Authentication-Server = &lt;undetermined&gt;     <br /></span></p>
<p><span style="font-family: courier new">Policy-Name = Test &#8211; Wireless     <br /></span></p>
<p><span style="font-family: courier new">Authentication-Type = PEAP     <br /></span></p>
<p><span style="font-family: courier new">EAP-Type = Secured password (EAP-MSCHAP v2)     <br /></span></p>
<p style="margin-left: 36pt"><span style="font-size: 8pt">     <br /></span>&#160; <br /><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WIFI Security: Background, Risks and Mitigation Part 1</title>
		<link>http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/</link>
		<comments>http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/#comments</comments>
		<pubDate>Tue, 09 Oct 2007 23:58:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[WIFI]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/</guid>
		<description><![CDATA[Like my posts on IT governance standards, I produced this training material some time back when I was doing a lot of IT security work. I&#8217;ve since moved onto other IT disciplines, but I hope that this article is of some use to those looking for an introduction to WIFI security. I have divided the [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense--></p>
<p>Like my posts on IT governance standards, I produced this training material some time back when I was doing a lot of IT security work. I&#8217;ve since moved onto other IT disciplines, but I hope that this article is of some use to those looking for an introduction to WIFI security. I have divided the material into two parts. The first half is background and theory, and the second half of a practical example.</p>
<p>I remember when writing it, my audience, although technically savvy did not a have a strong background in cryptography or security. So I tried to make it easy to read, rather than too technical. Not sure if I succeeded! <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><span id="more-126"></span></p>
<h2>A Security Primer &#8211; Security Principles</h2>
<p>The ISC2 common body of knowledge (CBK) is the basis for the Certified Information Systems Security Professional (CISSP) certification.</p>
<p>The CBK defines 3 major security principles known as the CIA triad: Confidentiality, Availability and Integrity.</p>
<ul>
<li><span style="text-decoration: underline">Confidentiality</span> is the principle that information will not be disclosed to unauthorized subjects. Unauthorized Network sniffing is an example of a violation of confidentiality. </li>
<li><span style="text-decoration: underline">Integrity</span> is trust that can be placed in the information. Data integrity is having assurance that the information has not been altered between its transmission and its reception. Data integrity can be compromised when information has been corrupted, willfully or accidentally, before it is read by its intended recipient. </li>
<li><span style="text-decoration: underline">Availability</span> defines that information or resources are available when required and are accurate, relevant and timely<strong>. </strong>It is certainly possible that a confidentiality and integrity are protected, but an attacker causes resources to become less available than required, or not available at all, eg Denial of Service. </li>
</ul>
<h2>Identification, Authentication, Authorisation and Accountability</h2>
<ul>
<li><span style="text-decoration: underline">Identification</span> describes a method of ensuring that a subject (user, program or process) is the entity it claims to be </li>
<li><span style="text-decoration: underline">Authentication</span> is the <strong>process</strong> of attempting to verify the digital identity of the sender of a communication such as a request to log in. The sender being authenticated may be a person using a computer, a computer itself or a computer program. </li>
<li><span style="text-decoration: underline">Authorisation</span> is the process of <strong>verifying</strong> that a known person has the authority to perform a certain operation. </li>
<li><span style="text-decoration: underline">Accountability</span>, is synonymous with non-repudiation. The non-repudiation of receipt of information means that an agent can&#8217;t deny receiving information. The non-repudiation of sourcing information means that an agent can&#8217;t deny sending information. </li>
</ul>
<h2>Encryption, Integrity and Authentication: WEP vs. WPA vs. WPA2</h2>
<h3>WEP</h3>
<p>Everyone who has ever site up wireless will know WEP. They will also likely know that WEP is a &#8216;bad thing&#8217;. Here we explain why WEP is now considered to be a very poor choice for wireless security and what was done to fix it.</p>
<p>The original Wired Equivalent Privacy (WEP) algorithm was used to protect wireless communication from eavesdropping. It uses predefined &#8216;WEP keys&#8217; to <strong>encrypt </strong>the traffic using the RC4 encryption algorithm. It also ensures data <strong>integrity </strong>by using an &quot;Integrity Check Value&quot;. This is 4 bytes and appended to the end of each packet.</p>
<p>One of several security problems with WEP is that using a static, unchanging WEP key means that brute force efforts can be undertaken to &#8216;crack&#8217; the key by capturing enough encrypted packets. WEP also uses an Initialisation Vector (IV) which is used to ensure that text encrypted with the same encryption key translates to a different ciphertext value. Unfortunately, IV is too small and is vulnerable to attacks that make the IV easy to determine. In addition, the size of the key &#8211; 40 bits &#8211; has been cited as a weakness of WEP. When the standard was written in 1997, 40-bit keys were considered reasonable for some applications. Since the goal was to protect against &quot;casual eavesdropping&quot; it seemed sufficient at the time. The U.S. did not tightly control exports of 40-bit encryption, and the IEEE wanted to ensure exportability of wireless devices.</p>
<p>The WEP Integrity Check Value (a fancy name for a hash) is based on CRC-32, an algorithm for detecting noise and common errors in transmission. CRC-32 is an excellent checksum for detecting errors, but a poor choice for a cryptographic hash. Better-designed encryption systems use algorithms such as MD5 or SHA-1 for their Integrity Check Values. The CRC-32 Integrity Check Value has a weakness that allows an attacker to modify an encrypted message and easily fix the Integrity Check Value so the message appears authentic.</p>
<p>So in relation to encryption and integrity, WEP fares rather badly. How does WEP fare in the areas of identification, authentication, authorisation and accountability? Not well either.</p>
<p>WEP defines two forms of authentication: Open System (no authentication) and Shared Key authentication. These are used to authenticate the wireless client to the access point. The idea was that authentication would be better than no authentication because the user has to <strong>prove knowledge of the shared WEP key</strong>, in effect, authenticating himself. In fact, the exact opposite is true: If you turn on authentication, you actually <strong>reduce</strong> the total security of your network and make it easier to guess your WEP key.</p>
<p>Shared Key authentication involves demonstrating the knowledge of the shared WEP key by encrypting a challenge to the access point, and the access point successfully decrypting that challenge. The problem is that a monitoring attacker can observe the challenge and the encrypted response. From those, he can determine the RC4 stream used to encrypt the response, and use that stream to encrypt any challenge he receives in the future. So by monitoring a successful authentication, the attacker can later forge an authentication.</p>
<p>So with open authentication, any wireless device that knows the WEP key will be accepted by the access point.</p>
<p>Hence, WEP is now considered to be a very poor choice for WIFI security. In response, the Wi-Fi Alliance, an industry trade group, created a standard called Wi-Fi Protected Access (WPA).</p>
<h3>WPA</h3>
<p>At the time, elements of WPA were actually taken from a work in progress IEEE standard called 802.11i. 802.11i was a new, in development standard aimed at a <strong>new generation of devices </strong>and had <strong>no backward compatibility </strong>requirements for WEP, meaning completely new wireless hardware would have to be produced to take advantage of it.</p>
<p>Thus, WPA in effect an interim measure designed to work <strong>with the constraints of WEP based systems</strong>, so that rather than a wholesale change/removal of wireless hardware, customers could upgrade software and firmware to gain the benefits of WPA. This was an attractive proposition from the point of view of the device manufacturers as it reduced redevelopment costs. But was it enough?</p>
<p>WPA offered a set of new features to alleviate the problems of WEP. A protocol called TKIP was added to WEP encryption. TKIP has been designed to &#8216;wrap&#8217; around WEP and improve the main security issues.</p>
<ul>
<li>The size of the IV has been doubled to 48 bytes which is also added to the MAC address and original WEP key <strong>per frame</strong>. </li>
<li>TKIP offers &#8216;re-keying&#8217;, where multiple encryption keys are changed on the fly at a configurable timeframe (defaults to per 10000 frames). </li>
</ul>
<p>(WEP alone uses the same encryption key. Thus with WPA, even if you managed to determine an encryption key, you have a very limited time in which you can use it to decrypt data before it changes again.)</p>
<p>WPA also has replaced the ICV with the Message Integrity Code (MIC) which eliminates some of the weaknesses with ICV.</p>
<h3>CISCO and CKIP</h3>
<p>While the WPA and WPA2 standards were being agreed to, Cisco added an extra feature to WEP to improve one of its major weaknesses &#8211; that of poor confidentiality via encryption. This is called the CKIP protocol. CKIP is a Cisco proprietary protocol that essentially does the same thing as TKIP does in WPA. This was designed to alleviate the immediate <strong>encryption </strong>concerns with WEP. CKIP however was not widely adopted as most vendors (Cisco included) opted to use the WPA standard as the interim measure.</p>
<h3>WPA2</h3>
<p>WPA2 is simply the complete 801.11i standard that was referred to earlier. It is actually very similar to WPA, as WPA used much of this standard. The main difference is the inclusion of the AES encryption protocol, which is an alternative to TKIP/WEP encryption. To support AES you need specialised hardware and thus require a new generation of wireless devices to support.</p>
<p>Advanced Encryption Standard (AES), also known as Rijndael, is an encryoption algorithm adopted as an encryption standard by the US government and is designed to replace the widely used by aging Data Encryption Standard (DES)</p>
<p>Frame integrity is now handled by a protocol called CCMP (with the simple name of &quot;Counter Mode with Cipher Block Chaining Message Authentication Code Protocol&quot;). CCMP is built around AES.</p>
<h3>802.1x / EAP Authentication</h3>
<p>Encryption is only part of the WIFI security picture. Even with an unbreakable encryption algorithm, if a malicious user was able to authenticate to the access point, they would be able to participate on the wireless network like any other authorised wireless client as the access point would exchange encryption keys with this seemingly &#8216;trusted&#8217; client.</p>
<p>WPA/WPA2 adopted IEEE 802.1x / EAP authentication (<strong>WPA Enterprise</strong>), rather than re-invent the wheel. 802.1x was originally designed as a port based network access control that ensured that a <strong>user</strong> could not access the network unless authorised. Note the word &quot;user&quot;, whereas WEP could only offer &quot;system&quot; authentication.</p>
<p>EAP is a complex standard described in detail later. However the IEEE did recognise that EAP added complexity and thus, added pre-shared keys for authentication (<strong>WPA Personal</strong>).</p>
<p><strong>Note: Pre shared keys are common in IPSEC/L2TP for authentication as well.     <br /></strong></p>
<p><strong>WPA Personal     <br /></strong></p>
<p>When WPA Personal uses pre-shared keys (PSK) for authentication, a common password or passphrase is configured on each wireless device and the access point. This is used to authenticate the client with the access point. Once this takes place, encruption keys can be exchanged and traffic can flow between client and access point.</p>
<p>However, if you do not make your pre-shared key long, you are susceptible to an offline dictionary attack where an attacker grabs a few packets at the time a legitimate station joins the wireless network and then can take those packets and attempt to recover the PSK used.</p>
<p>In addition, management of the PSK as the network grows becomes a major issue. It needs manual configuration on all WIFI clients. Thus, changing the PSK would be time consuming and result in downtime.</p>
<p><strong>WPA Enterprise     <br /></strong></p>
<p>WPA adopted 802.1x / EAP for authentication. EAP is an authentication <em>framework</em>, not a specific authentication <em>mechanism</em>. The EAP provides some common functions and a negotiation of the desired authentication mechanism. Such mechanisms are called <strong>EAP methods </strong>and there are a myriad of options and standards available. This flexibility has the disadvantage of being complex and difficult to understand the intricacies of every option.</p>
<p>The table below is a summary of the most applicable options. They are not the exhaustive list, but the others are not listed because they are either not applicable or are missing required features.</p>
<table style="border-collapse: collapse" border="0">
<tbody>
<tr>
<td style="border-right: black 0.5pt solid; padding-right: 7px; border-top: black 0.5pt solid; padding-left: 7px; border-left: black 0.5pt solid; border-bottom: black 0.5pt solid"><strong>802.1x EAP Types Feature/Benefit</strong>&#160;</td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; border-top: black 0.5pt solid; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid"><strong>TLS</strong>&#160;</td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; border-top: black 0.5pt solid; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid"><strong>TTLS</strong>&#160;</td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; border-top: black 0.5pt solid; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid"><strong>PEAP</strong>&#160;</td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; border-top: black 0.5pt solid; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid"><strong>LEAP</strong>&#160;</td>
</tr>
<tr>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: black 0.5pt solid; border-bottom: black 0.5pt solid">Client Side Certificate Required </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Yes </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">No </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">No </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">No </td>
</tr>
<tr>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: black 0.5pt solid; border-bottom: black 0.5pt solid">Server side certificate required </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Yes </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Yes </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Yes</td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">No </td>
</tr>
<tr>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: black 0.5pt solid; border-bottom: black 0.5pt solid">WEP Key Management </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Yes </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Yes </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Yes </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Yes </td>
</tr>
<tr>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: black 0.5pt solid; border-bottom: black 0.5pt solid">Developer </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Microsoft </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Funk Software </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Microsoft </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Cisco </td>
</tr>
<tr>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: black 0.5pt solid; border-bottom: black 0.5pt solid">Authentication </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Mutual </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Mutual </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Mutual </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Mutual </td>
</tr>
<tr>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: black 0.5pt solid; border-bottom: black 0.5pt solid">Deployment </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Hard </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Moderate </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Moderate </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Moderate </td>
</tr>
<tr>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: black 0.5pt solid; border-bottom: black 0.5pt solid">Wireless Security </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Highest </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">High </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">High </td>
<td style="border-right: black 0.5pt solid; padding-right: 7px; padding-left: 7px; border-left: medium none; border-bottom: black 0.5pt solid">Moderate&#160; </td>
</tr>
</tbody>
</table>
<p><strong>LEAP     <br /></strong></p>
<p>The Lightweight Extensible Authentication Protocol (LEAP) is a proprietary EAP implementation by Cisco Systems.</p>
<p>There is no native support for LEAP in any Windows operating system but is supported by third party supplicants (IEEE speak for client software). Support for other operating systems is unclear. This protocol is known to be vulnerable to dictionary attacks as it is based on shared secret passwords. Cisco still maintains that LEAP can be secure if sufficiently complex passwords are used.</p>
<p><strong>EAP-TLS     <br /></strong></p>
<p>EAP-TLS is an IETF open standard, and is well-supported among wireless vendors. It offers a good deal of security, due to using digital certificates and Public Key Infrastructure (PKI). Its main disadvantage is the management overhead to set up and maintain a PKI as well as client-side certificates. This factor has led to few deployments compared to other EAP solutions.</p>
<p>The requirement for a client-side certificate, however unpopular it may be, is what gives EAP-TLS its authentication strength and illustrates the classic convenience vs. security trade-off. A compromised password is not enough to break into EAP-TLS enabled systems because the hacker still needs to have the client-side certificate. When the client-side certificates are housed in smartcards, this offers the most secure authentication solution available because there is no way to steal a certificate from a smartcard without stealing the smartcard itself. Any physical theft of a smartcard would be immediately noticed and revoked and a new smartcard would be issued.</p>
<p>There are client and server implementations of it in Microsoft, Cisco, Apple, Linux, and open source. EAP-TLS is natively supported in MAC OS 10.3 and above, Windows 2000 SP4, Windows XP, Windows Mobile 2003 and above, and Windows CE 4.2.</p>
<p><strong>EAP-TTLS and PEAP     <br /></strong></p>
<p>EAP-TTLS and PEAP both do not use client side certificates. Instead they use PKI certificates only on the authentication server which is used to create a secure TLS tunnel to protect user authentication. PEAP was developed by Microsoft and Cisco and EAP-TTLS developed by Funk Software.</p>
<p>PEAP is natively supported in MAC OS 10.3 and above, Windows 2000 SP4, Windows XP, Windows Mobile 2003 and above, and Windows CE 4.2.</p>
<p>The server side implementation of PEAP/EAP-MSCHAPv2, called IAS (Internet Authentication Service), is also included in Windows 2003 server.</p>
<p>We will not discuss the differences between PEAP and EAP-TTLS here, except to say that PEAP has now overtaken EAP-TTLS in terms of popularity.</p>
<p><strong>802.1x Components     <br /></strong></p>
<p>802.1x consists of 3 main components.</p>
<ul style="margin-left: 90pt">
<li>A client (supplicant) </li>
<li>An &#8216;authenticator&#8217; (access point) </li>
<li>An &#8216;authentication server&#8217; (RADIUS). </li>
</ul>
<p>EAP is the mechanism used by all 3 components to communicate authentication information.</p>
<p><strong>RADIUS Server     <br /></strong></p>
<p>In a large wireless network, a means is required to provide central authentication for clients. A RADIUS server fills this need. The RADIUS protocol is the industry standard for AAA (Authentication, Authorisation and Accounting). Many Radius servers exist, and Microsoft provide a built in Radius Server with Windows Server called IAS which integrates with Active Directory. Other Radius servers can integrate with 3rd party authentication mechanisms (RSA keys and smartcards for example)</p>
<p><strong>Bringing it all together     <br /></strong></p>
<p>The key goal of any wireless network is to ensure confidentiality, integrity and availability. Without proper authentication, encryption is of limited value as it would be impossible to determine if the data has been tampered with.</p>
<p>802.1x / EAP provide the means to centrally manage who and what can access the wireless network. This also provides us with detailed accounting records of who or what has attempted to access the network (Accountability).</p>
<p>The mutual authentication offered by some EAP methods also means that a client can be sure that it is accessing the correct access point and not a malicious access point set up to lure clients into connecting to it and giving up sensitive information.</p>
<p>TLS and PEAP are the two best choices for wireless authentication. TLS offers more security than PEAP due to client certificates required as well as user credentials (two factor authentication). However PEAP is much easier to set up and deploy than TLS because you do not have to implement a PKI solution (which is a whole project in itself). In addition, when using an Active Directory integrated Radius server, authentication can be restricted to particular groups of users and computers and AD account lockout policies will be enforced.</p>
<p>If we combine this with the MAC address filtering and VLAN access lists described in section 2.1.4 we have a holistic solution that addresses the key security requirements.</p>
<p>We have:</p>
<ul style="margin-left: 54pt">
<li>An encryption mechanism that changes keys frequently and is unique for each client, so that by the time you have brute forced a encryption key, it has already been discarded and a new key has been generated </li>
<li>An authentication mechanism that requires the user to have a valid Active Directory user account, optionally a valid Active Directory Computer Account and optionally a valid client certificate issued by a trusted Certificate Authority (EAP/TLS) </li>
<li>An authentication mechanism that ensures that the client can ensure that the access point it is connecting to is known and trusted via a server side digital certificate. </li>
<li>An authentication mechanism that is centrally managed, so when users or computers are disabled they are unable to access all wireless services. </li>
<li>Centralised location for logging of access requests and their outcomes </li>
<li>Filtering so that only pre-defined MAC addresses can authenticate to an access point </li>
<li>Access lists that ensure that the Wireless VLAN can only access authorised parts of the network. </li>
</ul>
<p>In the next part to this post, we will discuss some additional security mechanisms for WIFI, as well as a WPA/PEAP example implementation.   <br /><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>An annotated IPSEC example</title>
		<link>http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/</link>
		<comments>http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 05:36:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[IPSEC]]></category>
		<category><![CDATA[Linksys]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/</guid>
		<description><![CDATA[IPSEC.. WTF? Isn&#8217;t this supposed to by SharePoint? Well, yeah you got me.. but a few years back I was a Cisco nerd in the ISP industry and got pretty handy at it. I wrote this article 3 years ago but then forgot about it until recently.. so it may as well see the light [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->   <br />IPSEC.. WTF? Isn&#8217;t this supposed to by SharePoint?</p>
<p>Well, yeah you got me.. but a few years back I was a Cisco nerd in the ISP industry and got pretty handy at it. I wrote this article 3 years ago but then forgot about it until recently.. so it may as well see the light of day because at the time I wrote it, there was very little info out there on this subject.</p>
<p><span id="more-36"></span></p>
<p>Linksys to Cisco IOS IPSEC Tunnel</p>
<p><strong>The network</strong></p>
<p>Site 1:&#160; (Linksys WAG54G)</p>
<ul>
<li>Inside Network: 172.18.30.0/24 </li>
<li>Gateway IP 200.100.1.1 </li>
<li>Inside IP 172.18.30.1 </li>
<li>NAT: Overloaded on Outside interface </li>
<li>LinkSys WAG54G. Software Version: 1.02.9, Dec 22 2004Site2: </li>
</ul>
<p>Site 2: (Cisco 3725)</p>
<ul>
<li>Inside Network: 192.168.100.0/24 </li>
<li>Gateway IP: 200.56.4.1 </li>
<li>Inside IP 192.168.100.1 </li>
<li>NAT: Overloaded on Outside interface </li>
<li>Cisco 3725 Router. IOS. IOS &#8482; 3700 Software (C3725-IK9O3S-M), Version 12.3(6), RELEASE SOFTWARE (fc3)      <br />System image file is &quot;slot0:c3725-ik9o3s-mz.123-6.bin&quot; </li>
</ul>
<p><strong>The IPSEC Parameters      <br /></strong></p>
<p>Probably the most common combination for IPSEC is to use 3DES/SHA/DH Group 2. For transforms ESP-3DES-SHA</p>
<ul>
<li>3DES, SHA1, ESP (no AH). </li>
<li>PFS is OFF! </li>
<li>DH Group 2 (Group1 and 2 only supported on the linksys) </li>
</ul>
<p><strong>The IKE Parameters      <br /></strong></p>
<ul>
<li>3DES, SHA, DH Group 2 </li>
<li>All IP traffic to traverse VPN tunnel. </li>
</ul>
<p><strong>Linksys Configuration</strong></p>
<ul>
<li>Security Tab &#8211; Choose VPN </li>
<li>You do not need to enable IPSEC passthrough. You would only do this if another device behind the linksys was actually doing the IPSEC tunnel. </li>
<li>Create a new tunnel entry and give it a name. Specify a subnet for the local security group (the local subnet) and set 172.18.30.0 with a 255.255.255.0 subnet mask </li>
<li>Specify a subnet for the remote security group. 192.168.100.0/255.255.255.0 </li>
</ul>
<p><a title="ls1.JPG" href="http://www.cleverworkarounds.com/?attachment_id=14"><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/100807-0536-anannotated13.jpg" border="0" /></a></p>
<ul>
<li>Now we have to specify the IP address of the remote IPSEC peer. In our example we are using an IP address not a domain name </li>
</ul>
<p><a title="ls2.JPG" href="http://www.cleverworkarounds.com/?attachment_id=15"><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/100807-0536-anannotated23.jpg" border="0" /></a></p>
<ul>
<li>Encryption should be set to 3DES and hash (authentication) to SHA. This is Phase II encryption (as will be confirmed in advanced settings screen). Set PFS to OFF in this example (Cisco defaults to off).&#160; The Key Lifetime here actually is Phase II key lifetime. Phase 1 key lifetime is in the advanced screen. </li>
<li>IKE is used, rather than manual.&#160; Cisco default setting for Key Lifetime is 86400 seconds. So change this end to match. Set the shared key as well. </li>
<li>Now click the advanced tab. Here we configure the phase 2 config. Repeat 3DES and SHA everywhere with 1024bit group (DH Group 2) </li>
</ul>
<p><a title="ls3.JPG" href="http://www.cleverworkarounds.com/?attachment_id=16"><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/100807-0536-anannotated33.jpg" border="0" /></a></p>
<p>Note how this says that the linksys will try and offer DES/MD5/768, 3DES/SHA/1024 and 3DES/MD5/1024. In fact proposal 1 and 3 are therefore identical. I have not looked deeply into this, although it increases the Phase 1 work required when the two peers negotiate phase 1.</p>
<p><strong>CIsco Configuration</strong></p>
<p>Note that this particular router has 6 IPSEC tunnels to different peers. In this example, the connection to the WAG54G is the latest IPSEC tunnel. Comments are in itallics</p>
<p><span style="font-family: courier new">SITEB#sh run      <br />Building configuration&#8230;       <br /></span></p>
<p><em>First we define the ISAKMP policies that this router will accept. 4 are defined here. This is because the other 5 IPSEC tunnels have unique IKE requirements. Each different IPSEC peers have different capabilities.</em></p>
<p><span style="font-family: courier new">crypto isakmp policy 1 (3DES/SHA/DH Group 5)      <br />encr 3des       <br />authentication pre-share       <br />group 5       <br />!       <br />crypto isakmp policy 2 (3DES/MD5/DH Group 5)       <br />encr 3des       <br />hash md5       <br />authentication pre-share       <br />group 5       <br />!       <br />crypto isakmp policy 3 (DES/SHA/DH Group 5)       <br />authentication pre-share       <br />group 5       <br />!       <br /></span><em>This is the ISAKMP policy that will match the LINKSYS router at Site A.      <br /></em><span style="font-family: courier new">crypto isakmp policy 4 (3DES/SHA/DH Group 2)      <br />encr 3des       <br />authentication pre-share       <br />group 2</span></p>
<p><em>Note that all ISAKMP use pre-shared keys for authentication. These are defined below.      <br /></em><span style="font-family: courier new">crypto isakmp key xxxxxxxxx address yyyyyy      <br />crypto isakmp key xxxxxxxxx address yyyyyy       <br />crypto isakmp key xxxxxxxxx address yyyyyy       <br />crypto isakmp key xxxxxxxxxx address yyyyyy       <br />crypto isakmp key xxxxxxxxxx address yyyyyy       <br />crypto isakmp key thisisasecretpassword address 200.100.1.1       <br />!       <br />!</span>     <br /><em>This is the IPSEC Parameters. (Phase II) &#8211; explain here..</em></p>
<p><span style="font-family: courier new">crypto ipsec transform-set Default esp-3des esp-sha-hmac      <br />!       <br /></span><em>Now we define the crypto map itself. We specify the ACL that needs to be matched for each peer and then the transform set to use. Remember the first 5 crypto map entires are for other VPN&#8217;s.</em></p>
<p><span style="font-family: courier new">crypto map IPSEC 5 ipsec-isakmp      <br />set peer yyyyyy       <br />set transform-set Default       <br />match address xxxxxx       <br />crypto map IPSEC 10 ipsec-isakmp       <br />set peer yyyyyy       <br />set transform-set Default       <br />match address xxxxxx       <br />crypto map IPSEC 15 ipsec-isakmp       <br />set peer yyyyyy       <br />set transform-set Default       <br />set pfs group5       <br />match address xxxxxx       <br />crypto map IPSEC 30 ipsec-isakmp       <br />set peer yyyyyy       <br />set transform-set Default       <br />match address xxxxxx       <br />crypto map IPSEC 40 ipsec-isakmp       <br />set peer yyyyyy       <br />set transform-set Default       <br />match address xxxxxx       <br />crypto map IPSEC 50 ipsec-isakmp       <br />set peer yyyyyy       <br />set transform-set Default       <br />match address xxxxxx       <br />crypto map IPSEC 60 ipsec-isakmp       <br />set peer 200.100.1.1       <br />set transform-set Default       <br />match address SITEB_to_SITEA       <br />!       <br />!       <br />!       <br />!       <br />interface FastEthernet0/0       <br />no ip address       <br />shutdown       <br />speed auto       <br />full-duplex       <br />!       <br /></span><em>Now we apply the crypto map to the externally facing interface. </em></p>
<p><span style="font-family: courier new">interface FastEthernet0/1      <br />ip address 200.56.4.1 255.255.255.252       <br />ip access-group Firewall in       <br />no ip redirects       <br />ip nat outside       <br />duplex auto       <br />speed auto       <br />no cdp enable       <br />crypto map IPSEC       <br />!       <br />interface FastEthernet1/0       <br />description Inside       <br />ip address 192.168.100.1&#160; 255.255.255.0       <br />ip nat inside       <br />duplex auto       <br />speed auto       <br />!       <br />ip nat inside source list inside_net interface FastEthernet0/1 overload       <br />ip route 0.0.0.0 0.0.0.0 200.56.4.2       <br />!       <br /></span><em>This is the ACL that the policy map called IPSEC uses to identify traffic to be IPSEC encrypted      <br /></em><span style="font-family: courier new">ip access-list extended SITEB_to_SITEA      <br />permit ip 192.168.100.0 0.0.0.255 172.18.30.0 0.0.0.255       <br /></span></p>
<p><span style="font-family: courier new">ip access-list extended Firewall      <br />remark       <br />remark Allow TCP replys       <br />remark       <br />permit tcp any any established       <br />remark       <br />remark For VPN IPSec       <br />remark       <br />permit esp host 200.100.1.1 host 200.56.4.1       <br />permit udp host 200.100.1.1 host 200.56.4.1 eq isakmp       <br />permit icmp any any parameter-problem       <br />permit icmp any any source-quench       <br />permit icmp any any echo-reply       <br />permit icmp any any time-exceeded       <br />permit icmp any any unreachable       <br />deny&#160;&#160; ip any any log</span></p>
<p><em>This ACL is used to Network address translate all outgoing packets *except* the stuff for IPSEC. That has to stay with source address preserve. Therefore by using a deny entry we stop the router NATting any traffic from 192.168.100.0/24 to 172.18.30.0/24</em></p>
<p><span style="font-family: courier new">ip access-list extended inside_net      <br />deny&#160;&#160; ip 192.168.100.0 0.0.0.255 172.18.30.0 0.0.0.255       <br />permit ip 192.168.100.0 0.0.0.255 any       <br />!       <br />end       <br /></span></p>
<p><strong>Example 1: Tunnel initiated from Linksys end</strong></p>
<p>Logs (linksys). Linksys logs are quite basic, but you can see the 3 IKE Phase 1 packet exchange and tell that its using Main Mode (eg MM_I1) and then the Phase II Quick Mode (QM_I1) exchange.</p>
<p>Main mode Phase 1 happens first    <br /><span style="font-family: courier new">2005-02-06 22:29:39 IKE[1] Tx &gt;&gt; MM_I1 : 200.56.4.1 SA      <br />2005-02-06 22:29:39 IKE[1] Rx &lt;&lt; MM_R1 : 200.56.4.1 SA       <br />2005-02-06 22:29:39 IKE[1] ISAKMP SA CKI=[9ddfe293 4d8be14b] CKR=[cca2f07a 9045af27]       <br />2005-02-06 22:29:39 IKE[1] ISAKMP SA 3DES / SHA / PreShared / MODP_1024 / 86400 sec (*86400 sec)       <br />2005-02-06 22:29:39 IKE[1] Tx &gt;&gt; MM_I2 : 200.56.4.1 KE, NONCE       <br />2005-02-06 22:29:40 IKE[1] Rx &lt;&lt; MM_R2 : 200.56.4.1 KE, NONCE, VID, VID, VID, VID       <br />2005-02-06 22:29:40 IKE[1] Tx &gt;&gt; MM_I3 : 200.56.4.1 ID, HASH       <br />2005-02-06 22:29:41 IKE[1] Rx &lt;&lt; MM_R3 : 200.56.4.1 ID, HASH       <br />Great &#8211; we got this far. Once you see QM you know you have made it to Phase II       <br />2005-02-06 22:29:41 IKE[1] Tx &gt;&gt; QM_I1 : 200.56.4.1 HASH, SA, NONCE, KE, ID, ID       <br />2005-02-06 22:29:42 IKE[1] Rx &lt;&lt; QM_R1 : 200.56.4.1 HASH, SA, NONCE, KE, ID, ID, NOTIFY       <br />2005-02-06 22:29:42 IKE[1] Tx &gt;&gt; QM_I2 : 200.56.4.1 HASH       <br />2005-02-06 22:29:42 IKE[1] ESP_SA 3DES / SHA / 86400 sec / SPI=[c243f13f:a213c248]       <br />2005-02-06 22:29:42 IKE[1] Set up ESP tunnel with 200.56.4.1 Success !       <br />2005-02-06 22:29:42       <br /></span></p>
<p>Logs (Cisco). Below is the output from the commands <strong>Debug crypto ipsec</strong> and <strong>debug crypto isakmp</strong></p>
<p>Now for Cisco logs there is a massive amount of detail for better or worse <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , So we will break it up. Recall that this sample setup has been taken from a live Cisco router that is loaded with 4 IPSEC policies. They are:</p>
<p>3DES/SHA/DH Group 5    <br />3DES/MD5/DH Group 5     <br />DES/SHA/DH Group 5     <br />3DES/SHA/DH Group 2</p>
<p>Now also recall that in addition to the defined policy, the Linksys does:</p>
<p>3DES/SHA/DH Group 2    <br />DES/MD5/DH Group 1     <br />3DES/SHA/DH Group 2     <br />3DES/MD5/DH Group 2.</p>
<p>Now the first part of the logs shows the linksys trying its 4 combinations against the 4 Cisco combinations. This takes a while.. Annotated comments inline</p>
<p>Feb&#160; 6 21:43:04.394 GMT: ISAKMP (0:0): received packet from 200.100.1.1 dport 500 sport 500 Global (N) NEW SA    <br />Feb&#160; 6 21:43:04.394 GMT: ISAKMP: local port 500, remote port 500     <br />Feb&#160; 6 21:43:04.394 GMT: ISAKMP: insert sa successfully sa = 64008FCC     <br />Feb&#160; 6 21:43:04.394 GMT: ISAKMP (0:709): Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH</p>
<p><em>This is a MAIN MODE exchange. Not an aggressive mode exchange</em></p>
<p>Feb&#160; 6 21:43:04.394 GMT: ISAKMP (0:709): Old State = IKE_READY&#160; New State = IKE_R_MM1    <br />Feb&#160; 6 21:43:04.394 GMT: ISAKMP (0:709): processing SA payload. message ID = 0     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP: Looking for a matching key for 200.100.1.1 in default : success     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): found peer pre-shared key matching 200.100.1.1     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709) local preshared key found<em>&#160;</em></p>
<p><em>The preshared keys match and therefore the IKE peer is authenticated. Now we have to negotiate a common IKE SA policy between the peers to protect the IKE Exchange</em></p>
<p>Feb&#160; 6 21:43:04.398 GMT: ISAKMP : Scanning profiles for xauth &#8230;</p>
<p>Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Checking ISAKMP transform 1 against priority 1 policy    <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash SHA     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Diffie-Hellman group offered does not match policy!</p>
<p><em>The cisco&#8217;s policy 1 is 3DES/SHA/DH Group 5 and this does not match Linksys polic 1 of DES/SHA/DH2</em></p>
<p>Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 3    <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Checking ISAKMP transform 2 against priority 1 policy     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption DES-CBC     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash MD5     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 1     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Encryption algorithm offered does not match policy!</p>
<p><em>The cisco&#8217;s policy 1 is 3DES/SHA/DH Group 5 and this does not match Linksys policy 2 of DES/MD5/DH2</em></p>
<p>Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 3    <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Checking ISAKMP transform 3 against priority 1 policy     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash SHA     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Diffie-Hellman group offered does not match policy!</p>
<p><em>Same as offer 1. The cisco&#8217;s policy 1 is 3DES/SHA/DH Group 5 and this does not match Linksys of 3DES/SHA/DH2</em></p>
<p>Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 3    <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Checking ISAKMP transform 4 against priority 1 policy     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash MD5     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Hash algorithm offered does not match policy!</p>
<p><em>The cisco&#8217;s policy 1 is 3DES/SHA/DH Group 5 and this does not match Linksys of 3DES/MD5/DH2</em></p>
<p>Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 0    <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Checking ISAKMP transform 1 against priority 2 policy     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash SHA     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Hash algorithm offered does not match policy!</p>
<p><em>The cisco&#8217;s policy 2 (note priority 2 policy above) is 3DES/MD5/DH Group 5 and this does not match Linksys of 3DES/SHA/DH2      <br /></em></p>
<p>Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 3</p>
<p>Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Checking ISAKMP transform 2 against priority 2 policy    <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption DES-CBC     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash MD5     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 1     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Encryption algorithm offered does not match policy!The cisco&#8217;s policy 2 is 3DES/MD5/DH Group 5 and this does not match Linksys of DES/MD5/DH1Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 3     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Checking ISAKMP transform 3 against priority 2 policy     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash SHA     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Hash algorithm offered does not match policy!The cisco&#8217;s policy 2 is 3DES/MD5/DH Group 5 and this does not match Linksys of 3DES/SHA/DH2Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 3     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP (0:709): Checking ISAKMP transform 4 against priority 2 policy     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash MD5     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.398 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Diffie-Hellman group offered does not match policy!The cisco&#8217;s policy 2 is 3DES/MD5/DH Group 5 and this does not match Linksys of 3DES/MD5/DH2Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 0     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Checking ISAKMP transform 1 against priority 3 policy     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash SHA     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Encryption algorithm offered does not match policy!     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 3The cisco&#8217;s policy 3 is DES/SHA/DH Group 5 and this does not match Linksys of 3DES/SHA/DH2</p>
<p>Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Checking ISAKMP transform 2 against priority 3 policy    <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption DES-CBC     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash MD5     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 1     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Hash algorithm offered does not match policy!     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 3</p>
<p><em>The cisco&#8217;s policy 3 is DES/SHA/DH Group 5 and this does not match Linksys of DES/MD5/DH1</em></p>
<p>Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Checking ISAKMP transform 3 against priority 3 policy    <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash SHA     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Encryption algorithm offered does not match policy!     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 3</p>
<p><em>The cisco&#8217;s policy 3 is DES/SHA/DH Group 5 and this does not match Linksys of 3DES/SHA/DH2</em></p>
<p>Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Checking ISAKMP transform 4 against priority 3 policy    <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash MD5     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Encryption algorithm offered does not match policy!     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): atts are not acceptable. Next payload is 0</p>
<p><em>The cisco&#8217;s policy 3 is DES/SHA/DH Group 5 and this does not match Linksys of 3DES/MD5/DH2</em></p>
<p>Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): Checking ISAKMP transform 1 against priority 4 policy    <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encryption 3DES-CBC     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; hash SHA     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; auth pre-share     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; default group 2     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life type in seconds     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:04.402 GMT: ISAKMP (0:709): atts are acceptable. Next payload is 3</p>
<p><em>Aha! We finally Hit policy 4 on the Cisco! 3DES/SHA/DH Group 2.</em></p>
<p><em>(This illustrates how advantageous it is to agree on a common IKE policy. Since each end has multiple combinations, there can be an increased number of combinations! Can be difficult though when dealing with vendor interoperability and 3DES export restrictions)</em></p>
<p><em>Now we deal with the second Main Mode Exchange. This is a DH exchange to generate shared secret keys.</em></p>
<p><em>You will see MMx which is Cisco&#8217;s state transitions as each sequence is performed. </em></p>
<p><em>MM1 &#8211; send an SA setup packet. </em></p>
<p>Feb&#160; 6 21:43:04.434 GMT: ISAKMP (0:709): Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE    <br />Feb&#160; 6 21:43:04.438 GMT: ISAKMP (0:709): Old State = IKE_R_MM1&#160; New State = IKE_R_MM1     <br />Feb&#160; 6 21:43:04.438 GMT: ISAKMP (0:709): sending packet to 200.100.1.1 my_port 500 peer_port 500 (R) MM_SA_SETUP     <br />Feb&#160; 6 21:43:04.438 GMT: ISAKMP (0:709): Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE</p>
<p><em>Packet send successfully therefore transition to MM2</em></p>
<p>Feb&#160; 6 21:43:04.438 GMT: ISAKMP (0:709): Old State = IKE_R_MM1&#160; New State = IKE_R_MM2    <br />Feb&#160; 6 21:43:05.378 GMT: ISAKMP (0:709): received packet from 200.100.1.1 dport 500 sport 500 Global (R) MM_SA_SETUP     <br />Feb&#160; 6 21:43:05.378 GMT: ISAKMP (0:709): Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH</p>
<p><em>We received the IKE packet back from the peer. Now we move from MM2 to MM3</em></p>
<p>Feb&#160; 6 21:43:05.378 GMT: ISAKMP (0:709): Old State = IKE_R_MM2&#160; New State = IKE_R_MM3    <br />Feb&#160; 6 21:43:05.382 GMT: ISAKMP (0:709): processing KE payload. message ID = 0     <br />Feb&#160; 6 21:43:05.422 GMT: ISAKMP (0:709): processing NONCE payload. message ID = 0     <br />Feb&#160; 6 21:43:05.422 GMT: ISAKMP: Looking for a matching key for 200.100.1.1 in default : success     <br />Feb&#160; 6 21:43:05.422 GMT: ISAKMP (0:709): found peer pre-shared key matching 200.100.1.1     <br />Feb&#160; 6 21:43:05.422 GMT: ISAKMP (0:709): SKEYID state generated     <br />Feb&#160; 6 21:43:05.422 GMT: ISAKMP (0:709): Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE     <br />Feb&#160; 6 21:43:05.422 GMT: ISAKMP (0:709): Old State = IKE_R_MM3&#160; New State = IKE_R_MM3     <br />Feb&#160; 6 21:43:05.422 GMT: ISAKMP (0:709): sending packet to 200.100.1.1 my_port 500 peer_port 500 (R) MM_KEY_EXCH     <br />Feb&#160; 6 21:43:05.422 GMT: ISAKMP (0:709): Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE</p>
<p><em>We received the DH key info from the peer and it checks out! Great. Now we do the thirsd MM exchange. We verify the peers identity uising IP address</em></p>
<p><em>Sending our packet out. Transition to MM4</em></p>
<p>Feb&#160; 6 21:43:05.422 GMT: ISAKMP (0:709): Old State = IKE_R_MM3&#160; New State = IKE_R_MM4    <br />Feb&#160; 6 21:43:06.942 GMT: ISAKMP (0:709): received packet from 200.100.1.1 dport 500 sport 500 Global (R) MM_KEY_EXCH     <br />Feb&#160; 6 21:43:06.942 GMT: ISAKMP (0:709): Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH</p>
<p><em>Successfully received packet from peer. to MM5</em></p>
<p>Feb&#160; 6 21:43:06.942 GMT: ISAKMP (0:709): Old State = IKE_R_MM4&#160; New State = IKE_R_MM5    <br />Feb&#160; 6 21:43:06.942 GMT: ISAKMP (0:709): processing ID payload. message ID = 0     <br />Feb&#160; 6 21:43:06.942 GMT: ISAKMP (0:709): ID payload     <br />next-payload : 8     <br />type&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 1     <br />address&#160;&#160;&#160;&#160;&#160; : 200.100.1.1     <br />protocol&#160;&#160;&#160;&#160; : 0     <br />port&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0     <br />length&#160;&#160;&#160;&#160;&#160;&#160; : 12</p>
<p><em>At this point, the peer (the Linksys) has sent its identity info as per the 3rd main mode exchange of IKE Phase 1. The error message below is a bit of a red herring. It relates to a specific IPSEC config the router checks for. See here for more info. <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122newft/122t/122t15/ft_vrfip.htm"><span style="color: blue; text-decoration: underline">http://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122newft/122t/122t15/ft_vrfip.htm</span></a></em>     <br /><em>It can be safely ignored..</em></p>
<p>Feb&#160; 6 21:43:06.942 GMT: ISAKMP (0:709): peer matches *none* of the profiles</p>
<p><em>Now we need to check the hash of the identity data</em></p>
<p>Feb&#160; 6 21:43:06.942 GMT: ISAKMP (0:709): processing HASH payload. message ID = 0    <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): SA authentication status:     <br />Feb&#160; 6 21:43:06.946 GMT:&#160; authenticated     <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): SA has been authenticated with 200.100.1.1</p>
<p><em>Great &#8211; everything checks out. Again, ignore the next message</em></p>
<p>Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): peer matches *none* of the profiles</p>
<p><em>Now we send our ID info to the Linksys peer to complete the 3rd exchange of Main Mode Phase 1.</em></p>
<p>Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE    <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): Old State = IKE_R_MM5&#160; New State = IKE_R_MM5     <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): SA is doing pre-shared key authentication using id type ID_IPV4_ADDR     <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): ID payload     <br />next-payload : 8     <br />type&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 1     <br />address&#160;&#160;&#160;&#160;&#160; : 200.56.4.1     <br />protocol&#160;&#160;&#160;&#160; : 17     <br />port&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 500     <br />length&#160;&#160;&#160;&#160;&#160;&#160; : 12     <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (709): Total payload length: 12     <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): sending packet to 200.100.1.1 my_port 500 peer_port 500 (R) MM_KEY_EXCH     <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE</p>
<p><em>Great! It looks like it all has worked as expected.</em></p>
<p>Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): Old State = IKE_R_MM5&#160; New State = IKE_P1_COMPLETE    <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): Input = IKE_MESG_INTERNAL, IKE_PHASE1_COMPLETE     <br />Feb&#160; 6 21:43:06.946 GMT: ISAKMP (0:709): Old State = IKE_P1_COMPLETE&#160; New State = IKE_P1_COMPLETE</p>
<p><em>Wohoo! Phase 1 is complete. Now we move to Phase 2 and do some real work. Now in Phase II, there is one mode called Quick mode and it is a 3 way exchange. First we get a packet from the originating peer &#8211; the Linksys. We check the hash and then the security association payload.</em></p>
<p>Feb&#160; 6 21:43:07.894 GMT: ISAKMP (0:709): received packet from 200.100.1.1 dport 500 sport 500 Global (R) QM_IDLE&#160;&#160;&#160;&#160;&#160; <br />Feb&#160; 6 21:43:07.894 GMT: ISAKMP: set new node -841765728 to QM_IDLE&#160;&#160;&#160;&#160;&#160; <br />Feb&#160; 6 21:43:07.894 GMT: ISAKMP (0:709): processing HASH payload. message ID = -841765728     <br />Feb&#160; 6 21:43:07.894 GMT: ISAKMP (0:709): processing SA payload. message ID = -841765728</p>
<p><em>We have an IPSEC proposal to examine. Does it match our end?</em></p>
<p>Feb&#160; 6 21:43:07.894 GMT: ISAKMP (0:709): Checking IPSec proposal 1    <br />Feb&#160; 6 21:43:07.894 GMT: ISAKMP: transform 1, ESP_3DES     <br />Feb&#160; 6 21:43:07.894 GMT: ISAKMP:&#160;&#160; attributes in transform:     <br />Feb&#160; 6 21:43:07.894 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; SA life type in seconds     <br />Feb&#160; 6 21:43:07.894 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; SA life duration (VPI) of&#160; 0&#215;0 0&#215;1 0&#215;51 0&#215;80     <br />Feb&#160; 6 21:43:07.898 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; group is 2     <br />Feb&#160; 6 21:43:07.898 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; encaps is 1 (Tunnel)     <br />Feb&#160; 6 21:43:07.898 GMT: ISAKMP:&#160;&#160;&#160;&#160;&#160; authenticator is HMAC-SHA</p>
<p><em>Yes this proposal matches! Now we send our proposal and acceptance!</em></p>
<p>Feb&#160; 6 21:43:07.898 GMT: ISAKMP (0:709): atts are acceptable.    <br />Feb&#160; 6 21:43:07.898 GMT: IPSEC(validate_proposal_request): proposal part #1,     <br />&#160; (key eng. msg.) INBOUND local= 200.56.4.1, remote= 200.100.1.1,     <br />&#160;&#160;&#160; local_proxy= 192.168.100.0/255.255.255.0/0/0 (type=4),     <br />&#160;&#160;&#160; remote_proxy= 172.18.30.0/255.255.255.0/0/0 (type=4),     <br />&#160;&#160;&#160; protocol= ESP, transform= esp-3des esp-sha-hmac&#160; (Tunnel),     <br />&#160;&#160;&#160; lifedur= 0s and 0kb,     <br />&#160;&#160;&#160; spi= 0&#215;0(0), conn_id= 0, keysize= 0, flags= 0&#215;22</p>
<p>Feb&#160; 6 21:43:07.930 GMT: ISAKMP (0:709): processing NONCE payload. message ID = -841765728    <br />Feb&#160; 6 21:43:07.930 GMT: ISAKMP (0:709): processing KE payload. message ID = -841765728     <br />Feb&#160; 6 21:43:07.974 GMT: ISAKMP (0:709): processing ID payload. message ID = -841765728     <br />Feb&#160; 6 21:43:07.974 GMT: ISAKMP (0:709): processing ID payload. message ID = -841765728     <br />Feb&#160; 6 21:43:07.974 GMT: ISAKMP (0:709): asking for 1 spis from ipsec     <br />Feb&#160; 6 21:43:07.974 GMT: ISAKMP (0:709): Node -841765728, Input = IKE_MESG_FROM_PEER, IKE_QM_EXCH     <br />Feb&#160; 6 21:43:07.974 GMT: ISAKMP (0:709): Old State = IKE_QM_READY&#160; New State = IKE_QM_SPI_STARVE     <br />Feb&#160; 6 21:43:07.974 GMT: IPSEC(key_engine): got a queue event&#8230;     <br />Feb&#160; 6 21:43:07.974 GMT: IPSEC(spi_response): getting spi 1387857340 for SA     <br />from 200.56.4.1&#160;&#160; to 200.100.1.1&#160; for prot 3     <br />Feb&#160; 6 21:43:07.974 GMT: ISAKMP: received ke message (2/1)     <br />Feb&#160; 6 21:43:08.226 GMT: ISAKMP (0:709): sending packet to 200.100.1.1 my_port 500 peer_port 500 (R) QM_IDLE</p>
<p><em>Okay we have sent our Quick Mode reply packet to the Linksys</em></p>
<p>Feb&#160; 6 21:43:08.226 GMT: ISAKMP (0:709): Node -841765728, Input = IKE_MESG_FROM_IPSEC, IKE_SPI_REPLY    <br />Feb&#160; 6 21:43:08.226 GMT: ISAKMP (0:709): Old State = IKE_QM_SPI_STARVE&#160; New State = IKE_QM_R_QM2</p>
<p><em>We have received the acknoweledgement from the peer and can proceed to build the IPSEC Security Association!</em></p>
<p>Feb&#160; 6 21:43:09.758 GMT: ISAKMP (0:709): received packet from 200.100.1.1 dport 500 sport 500 Global (R) QM_IDLE&#160;&#160;&#160;&#160;&#160; <br />Feb&#160; 6 21:43:09.758 GMT: ISAKMP (0:709): Creating IPSec SAs     <br />Feb&#160; 6 21:43:09.758 GMT:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; inbound SA from 200.100.1.1 to 200.56.4.1 (f/i)&#160; 0/ 0     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; (proxy 172.18.30.0 to 192.168.100.0)     <br />Feb&#160; 6 21:43:09.762 GMT:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; has spi 0&#215;52B905BC and conn_id 5810 and flags 23     <br />Feb&#160; 6 21:43:09.762 GMT:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; lifetime of 86400 seconds     <br />Feb&#160; 6 21:43:09.762 GMT:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; has client flags 0&#215;0     <br />Feb&#160; 6 21:43:09.762 GMT:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; outbound SA from 200.56.4.1&#160;&#160; to 200.100.1.1&#160; (f/i)&#160; 0/ 0 (proxy 192.168.100.0&#160;&#160; to 172.18.30.0&#160;&#160;&#160; )     <br />Feb&#160; 6 21:43:09.762 GMT:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; has spi -841765728 and conn_id 5811 and flags 2B     <br />Feb&#160; 6 21:43:09.762 GMT:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; lifetime of 86400 seconds     <br />Feb&#160; 6 21:43:09.762 GMT:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; has client flags 0&#215;0     <br />Feb&#160; 6 21:43:09.762 GMT: ISAKMP (0:709): deleting node -841765728 error FALSE reason &quot;quick mode done (await)&quot;     <br />Feb&#160; 6 21:43:09.762 GMT: ISAKMP (0:709): Node -841765728, Input = IKE_MESG_FROM_PEER, IKE_QM_EXCH     <br />Feb&#160; 6 21:43:09.762 GMT: ISAKMP (0:709): Old State = IKE_QM_R_QM2&#160; New State = IKE_QM_PHASE2_COMPLETE</p>
<p><em>Yay! Phase II completed as well. Build that SA then!</em></p>
<p>Feb&#160; 6 21:43:09.762 GMT: IPSEC(key_engine): got a queue event&#8230;    <br />Feb&#160; 6 21:43:09.762 GMT: IPSEC(initialize_sas): ,     <br />&#160; (key eng. msg.) INBOUND local= 200.56.4.1, remote= 200.100.1.1,     <br />&#160;&#160;&#160; local_proxy= 192.168.100.0/255.255.255.0/0/0 (type=4),     <br />&#160;&#160;&#160; remote_proxy= 172.18.30.0/255.255.255.0/0/0 (type=4),     <br />&#160;&#160;&#160; protocol= ESP, transform= esp-3des esp-sha-hmac&#160; (Tunnel),     <br />&#160;&#160;&#160; lifedur= 86400s and 0kb,     <br />&#160;&#160;&#160; spi= 0&#215;52B905BC(1387857340), conn_id= 5810, keysize= 0, flags= 0&#215;23     <br />Feb&#160; 6 21:43:09.762 GMT: IPSEC(initialize_sas): ,     <br />&#160; (key eng. msg.) OUTBOUND local= 200.56.4.1, remote= 200.100.1.1,     <br />&#160;&#160;&#160; local_proxy= 192.168.100.0/255.255.255.0/0/0 (type=4),     <br />&#160;&#160;&#160; remote_proxy= 172.18.30.0/255.255.255.0/0/0 (type=4),     <br />&#160;&#160;&#160; protocol= ESP, transform= esp-3des esp-sha-hmac&#160; (Tunnel),     <br />&#160;&#160;&#160; lifedur= 86400s and 0kb,     <br />&#160;&#160;&#160; spi= 0xCDD3ACA0(3453201568), conn_id= 5811, keysize= 0, flags= 0&#215;2B     <br />&#160; <br />Feb&#160; 6 21:43:09.762 GMT: IPSEC(crypto_ipsec_sa_find_ident_head): reconnecting with the same proxies and 200.100.1.1     <br />Feb&#160; 6 21:43:09.762 GMT: IPSEC(add mtree): src 192.168.100.0, dest 172.18.30.0, dest_port 0Feb&#160; 6 21:43:09.762 GMT: IPSEC(create_sa): sa created,     <br />&#160; (sa) sa_dest= 200.56.4.1, sa_prot= 50,     <br />&#160;&#160;&#160; sa_spi= 0&#215;52B905BC(1387857340),     <br />&#160;&#160;&#160; sa_trans= esp-3des esp-sha-hmac , sa_conn_id= 5810     <br />Feb&#160; 6 21:43:09.762 GMT: IPSEC(create_sa): sa created,     <br />&#160; (sa) sa_dest= 200.100.1.1, sa_prot= 50,     <br />&#160;&#160;&#160; sa_spi= 0xCDD3ACA0(3453201568),     <br />&#160;&#160;&#160; sa_trans= esp-3des esp-sha-hmac , sa_conn_id= 5811     <br />&#160; <br />Done! Now lets use the Cisco show commands to have a look at the ISAKMP SA and IPSEC sa&#8217;s.</p>
<p><strong>Checking IPSEC Status</strong></p>
<p><span style="font-family: courier new">RTCI01#sh cry      <br />RTCI01#sh crypto isa       <br />RTCI01#sh crypto isakmp sa       <br />dst&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; src&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; state&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; conn-id slot       <br />xxxxxx&#160;&#160; 200.100.1.1&#160;&#160; QM_IDLE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 673&#160;&#160;&#160; 0       <br />200.56.4.1&#160;&#160; 200.100.1.1&#160; QM_IDLE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 709&#160;&#160;&#160; 0       <br />xxxxxx&#160;&#160; 200.100.1.1&#160;&#160; QM_IDLE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 697&#160;&#160;&#160; 0       <br />xxxxxx&#160;&#160; 200.100.1.1&#160;&#160; QM_IDLE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 674&#160;&#160;&#160; 0       <br /></span></p>
<p><span style="font-family: courier new">RTCI01#sh crypto ipsec sa      <br /></span></p>
<p><span style="font-family: courier new">interface: FastEthernet0/1      <br />&#160;&#160;&#160; Crypto map tag: IPSEC, local addr. 200.56.4.1       <br /></span></p>
<p><span style="font-family: courier new">&#160;&#160; protected vrf:      <br />&#160;&#160; local&#160; ident (addr/mask/prot/port): (192.168.100.0/255.255.255.0/0/0)       <br />&#160;&#160; remote ident (addr/mask/prot/port): (172.18.30.0/255.255.255.0/0/0)       <br />&#160;&#160; current_peer: 200.100.1.1:500       <br />&#160;&#160;&#160;&#160; PERMIT, flags={origin_is_acl,}       <br />&#160;&#160;&#160; #pkts encaps: 0, #pkts encrypt: 0, #pkts digest 0       <br />&#160;&#160;&#160; #pkts decaps: 0, #pkts decrypt: 0, #pkts verify 0       <br />&#160;&#160;&#160; #pkts compressed: 0, #pkts decompressed: 0       <br />&#160;&#160;&#160; #pkts not compressed: 0, #pkts compr. failed: 0       <br />&#160;&#160;&#160; #pkts not decompressed: 0, #pkts decompress failed: 0       <br />&#160;&#160;&#160; #send errors 0, #recv errors 0       <br /></span></p>
<p><span style="font-family: courier new">&#160;&#160;&#160;&#160; local crypto endpt.: 200.56.4.1, remote crypto endpt.: 200.100.1.1      <br />&#160;&#160;&#160;&#160; path mtu 1500, media mtu 1500       <br />&#160;&#160;&#160;&#160; current outbound spi: CDD3ACA0       <br /></span></p>
<p><span style="font-family: courier new">&#160;&#160;&#160;&#160; inbound esp sas:      <br />&#160;&#160;&#160;&#160;&#160; spi: 0&#215;52B905BC(1387857340)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; transform: esp-3des esp-sha-hmac ,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; in use settings ={Tunnel, }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; slot: 0, conn id: 5810, flow_id: 2827, crypto map: PIVoD       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; sa timing: remaining key lifetime (k/sec): (4573743/3565)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; IV size: 8 bytes       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; replay detection support: Y       <br /></span></p>
<p><span style="font-family: courier new">&#160;&#160;&#160;&#160; inbound ah sas:      <br /></span></p>
<p><span style="font-family: courier new">&#160;&#160;&#160;&#160; inbound pcp sas:      <br /></span></p>
<p><span style="font-family: courier new">&#160;&#160;&#160;&#160; outbound esp sas:      <br />&#160;&#160;&#160;&#160;&#160; spi: 0xCDD3ACA0(3453201568)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; transform: esp-3des esp-sha-hmac ,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; in use settings ={Tunnel, }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; slot: 0, conn id: 5811, flow_id: 2828, crypto map: PIVoD       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; sa timing: remaining key lifetime (k/sec): (4573743/3562)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; IV size: 8 bytes       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; replay detection support: Y       <br /></span></p>
<p><span style="font-family: courier new">&#160;&#160;&#160;&#160; outbound ah sas:      <br /></span></p>
<p><span style="font-family: courier new">&#160;&#160;&#160;&#160; outbound pcp sas:      <br /></span></p>
<p><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/&title=An+annotated+IPSEC+example" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/&title=An+annotated+IPSEC+example" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/&title=An+annotated+IPSEC+example" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/&title=An+annotated+IPSEC+example" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

