CINXE.COM
Identifying internal IP addresses - Ex Libris Knowledge Center
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Identifying internal IP addresses - Ex Libris Knowledge Center</title> <link media="screen" type="text/css" rel="stylesheet" href="https://a.mtstatic.com/@cache/layout/legacy.css?_=814adc7572602bc7c2a39e3e9899638a_a25vd2xlZGdlLmV4bGlicmlzZ3JvdXAuY29t:site_11811" id="mt-screen-css" /> <link media="print" type="text/css" rel="stylesheet" href="https://a.mtstatic.com/@cache/layout/print.css?_=a87985e947b3b92ebec6cfe4689bceb3:site_11811" id="mt-print-css" /> <script type="text/javascript" nonce="14c6c8309dfb1f8a12009bb45a09fb77c7ffa09864aa9e14a43315566463badc" src="https://a.mtstatic.com/deki/javascript/out/grape.min.js?_=76f77a33377b2f0da26a22ff3a2c3345f92f980b:site_11811"></script><script type="application/json" id="mt-global-settings" nonce="14c6c8309dfb1f8a12009bb45a09fb77c7ffa09864aa9e14a43315566463badc">{"apiToken":"xhr_2_1732776139_393f91b740ceb1edd8ad8e82f8d1a374f7c1582a50853d6aa9422f3bdc1603c9","pageId":34773,"pageViewId":"cf79e964-bc1a-45d7-b045-bda4fab4358b"}</script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.css" integrity="sha256-jySGIHdxeqZZvJ9SHgPNjbsBP8roij7/WjgkoGTJICk=" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick-theme.min.css" integrity="sha256-WmhCJ8Hu9ZnPRdh14PkGpz4PskespJwN5wwaFOfvgY8=" crossorigin="anonymous"> <script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.js" integrity="sha256-4Cr335oZDYg4Di3OwgUOyqSTri0jUm2+7Gf2kH3zp1I=" crossorigin="anonymous"></script> <script type="text/javascript">/*<![CDATA[*/ var stIsIE = /*@cc_on!@*/false; sorttable = { init: function() { // quit if this function has already been called if (arguments.callee.done) return; // flag this function so we don't do the same thing twice arguments.callee.done = true; // kill the timer if (_timer) clearInterval(_timer); if (!document.createElement || !document.getElementsByTagName) return; sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; forEach(document.getElementsByTagName('table'), function(table) { if (table.className.search(/\bsortable\b/) != -1) { sorttable.makeSortable(table); } }); }, makeSortable: function(table) { if (table.getElementsByTagName('thead').length == 0) { // table doesn't have a tHead. Since it should have, create one and // put the first table row in it. the = document.createElement('thead'); the.appendChild(table.rows[0]); table.insertBefore(the,table.firstChild); } // Safari doesn't support table.tHead, sigh if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; if (table.tHead.rows.length != 1) return; // can't cope with two header rows // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as // "total" rows, for example). This is B&R, since what you're supposed // to do is put them in a tfoot. So, if there are sortbottom rows, // for backwards compatibility, move them to tfoot (creating it if needed). sortbottomrows = []; for (var i=0; i<table.rows.length; i++) { if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { sortbottomrows[sortbottomrows.length] = table.rows[i]; } } if (sortbottomrows) { if (table.tFoot == null) { // table doesn't have a tfoot. Create one. tfo = document.createElement('tfoot'); table.appendChild(tfo); } for (var i=0; i<sortbottomrows.length; i++) { tfo.appendChild(sortbottomrows[i]); } delete sortbottomrows; } // work through each column and calculate its type headrow = table.tHead.rows[0].cells; for (var i=0; i<headrow.length; i++) { // manually override the type with a sorttable_type attribute if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); if (mtch) { override = mtch[1]; } if (mtch && typeof sorttable["sort_"+override] == 'function') { headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; } else { headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); } // make it clickable to sort headrow[i].sorttable_columnindex = i; headrow[i].sorttable_tbody = table.tBodies[0]; dean_addEvent(headrow[i],"click", sorttable.innerSortFunction = function(e) { if (this.className.search(/\bsorttable_sorted\b/) != -1) { // if we're already sorted by this column, just // reverse the table, which is quicker sorttable.reverse(this.sorttable_tbody); this.className = this.className.replace('sorttable_sorted', 'sorttable_sorted_reverse'); this.removeChild(document.getElementById('sorttable_sortfwdind')); sortrevind = document.createElement('span'); sortrevind.id = "sorttable_sortrevind"; sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5' : ' ▴'; this.appendChild(sortrevind); return; } if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { // if we're already sorted by this column in reverse, just // re-reverse the table, which is quicker sorttable.reverse(this.sorttable_tbody); this.className = this.className.replace('sorttable_sorted_reverse', 'sorttable_sorted'); this.removeChild(document.getElementById('sorttable_sortrevind')); sortfwdind = document.createElement('span'); sortfwdind.id = "sorttable_sortfwdind"; sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6' : ' ▾'; this.appendChild(sortfwdind); return; } // remove sorttable_sorted classes theadrow = this.parentNode; forEach(theadrow.childNodes, function(cell) { if (cell.nodeType == 1) { // an element cell.className = cell.className.replace('sorttable_sorted_reverse',''); cell.className = cell.className.replace('sorttable_sorted',''); } }); sortfwdind = document.getElementById('sorttable_sortfwdind'); if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } sortrevind = document.getElementById('sorttable_sortrevind'); if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } this.className += ' sorttable_sorted'; sortfwdind = document.createElement('span'); sortfwdind.id = "sorttable_sortfwdind"; sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6' : ' ▾'; this.appendChild(sortfwdind); // build an array to sort. This is a Schwartzian transform thing, // i.e., we "decorate" each row with the actual sort key, // sort based on the sort keys, and then put the rows back in order // which is a lot faster because you only do getInnerText once per row row_array = []; col = this.sorttable_columnindex; rows = this.sorttable_tbody.rows; for (var j=0; j<rows.length; j++) { row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; } /* If you want a stable sort, uncomment the following line */ //sorttable.shaker_sort(row_array, this.sorttable_sortfunction); /* and comment out this one */ row_array.sort(this.sorttable_sortfunction); tb = this.sorttable_tbody; for (var j=0; j<row_array.length; j++) { tb.appendChild(row_array[j][1]); } delete row_array; }); } } }, guessType: function(table, column) { // guess the type of a column based on its first non-blank row sortfn = sorttable.sort_alpha; for (var i=0; i<table.tBodies[0].rows.length; i++) { text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); if (text != '') { if (text.match(/^-?[£$¤]?[\d,.]+%?$/)) { return sorttable.sort_numeric; } // check for a date: dd/mm/yyyy or dd/mm/yy // can have / or . or - as separator // can be mm/dd as well possdate = text.match(sorttable.DATE_RE) if (possdate) { // looks like a date first = parseInt(possdate[1]); second = parseInt(possdate[2]); if (first > 12) { // definitely dd/mm return sorttable.sort_ddmm; } else if (second > 12) { return sorttable.sort_mmdd; } else { // looks like a date, but we can't tell which, so assume // that it's dd/mm (English imperialism!) and keep looking sortfn = sorttable.sort_ddmm; } } } } return sortfn; }, getInnerText: function(node) { // gets the text we want to use for sorting for a cell. // strips leading and trailing whitespace. // this is *not* a generic getInnerText function; it's special to sorttable. // for example, you can override the cell text with a customkey attribute. // it also gets .value for <input> fields. if (!node) return ""; hasInputs = (typeof node.getElementsByTagName == 'function') && node.getElementsByTagName('input').length; if (node.getAttribute("sorttable_customkey") != null) { return node.getAttribute("sorttable_customkey"); } else if (typeof node.textContent != 'undefined' && !hasInputs) { return node.textContent.replace(/^\s+|\s+$/g, ''); } else if (typeof node.innerText != 'undefined' && !hasInputs) { return node.innerText.replace(/^\s+|\s+$/g, ''); } else if (typeof node.text != 'undefined' && !hasInputs) { return node.text.replace(/^\s+|\s+$/g, ''); } else { switch (node.nodeType) { case 3: if (node.nodeName.toLowerCase() == 'input') { return node.value.replace(/^\s+|\s+$/g, ''); } case 4: return node.nodeValue.replace(/^\s+|\s+$/g, ''); break; case 1: case 11: var innerText = ''; for (var i = 0; i < node.childNodes.length; i++) { innerText += sorttable.getInnerText(node.childNodes[i]); } return innerText.replace(/^\s+|\s+$/g, ''); break; default: return ''; } } }, reverse: function(tbody) { // reverse the rows in a tbody newrows = []; for (var i=0; i<tbody.rows.length; i++) { newrows[newrows.length] = tbody.rows[i]; } for (var i=newrows.length-1; i>=0; i--) { tbody.appendChild(newrows[i]); } delete newrows; }, /* sort functions each sort function takes two parameters, a and b you are comparing a[0] and b[0] */ sort_numeric: function(a,b) { aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); if (isNaN(aa)) aa = 0; bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); if (isNaN(bb)) bb = 0; return aa-bb; }, sort_alpha: function(a,b) { if (a[0]==b[0]) return 0; if (a[0]<b[0]) return -1; return 1; }, sort_ddmm: function(a,b) { mtch = a[0].match(sorttable.DATE_RE); y = mtch[3]; m = mtch[2]; d = mtch[1]; if (m.length == 1) m = '0'+m; if (d.length == 1) d = '0'+d; dt1 = y+m+d; mtch = b[0].match(sorttable.DATE_RE); y = mtch[3]; m = mtch[2]; d = mtch[1]; if (m.length == 1) m = '0'+m; if (d.length == 1) d = '0'+d; dt2 = y+m+d; if (dt1==dt2) return 0; if (dt1<dt2) return -1; return 1; }, sort_mmdd: function(a,b) { mtch = a[0].match(sorttable.DATE_RE); y = mtch[3]; d = mtch[2]; m = mtch[1]; if (m.length == 1) m = '0'+m; if (d.length == 1) d = '0'+d; dt1 = y+m+d; mtch = b[0].match(sorttable.DATE_RE); y = mtch[3]; d = mtch[2]; m = mtch[1]; if (m.length == 1) m = '0'+m; if (d.length == 1) d = '0'+d; dt2 = y+m+d; if (dt1==dt2) return 0; if (dt1<dt2) return -1; return 1; }, shaker_sort: function(list, comp_func) { // A stable sort function to allow multi-level sorting of data // see: http://en.wikipedia.org/wiki/Cocktail_sort // thanks to Joseph Nahmias var b = 0; var t = list.length - 1; var swap = true; while(swap) { swap = false; for(var i = b; i < t; ++i) { if ( comp_func(list[i], list[i+1]) > 0 ) { var q = list[i]; list[i] = list[i+1]; list[i+1] = q; swap = true; } } // for t--; if (!swap) break; for(var i = t; i > b; --i) { if ( comp_func(list[i], list[i-1]) < 0 ) { var q = list[i]; list[i] = list[i-1]; list[i-1] = q; swap = true; } } // for b++; } // while(swap) } } /* ****************************************************************** Supporting functions: bundled here to avoid depending on a library ****************************************************************** */ // Dean Edwards/Matthias Miller/John Resig /* for Mozilla/Opera9 */ if (document.addEventListener) { document.addEventListener("DOMContentLoaded", sorttable.init, false); } /* for Internet Explorer */ /*@cc_on @*/ /*@if (@_win32) document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); var script = document.getElementById("__ie_onload"); script.onreadystatechange = function() { if (this.readyState == "complete") { sorttable.init(); // call the onload handler } }; /*@end @*/ /* for Safari */ if (/WebKit/i.test(navigator.userAgent)) { // sniff var _timer = setInterval(function() { if (/loaded|complete/.test(document.readyState)) { sorttable.init(); // call the onload handler } }, 10); } /* for other browsers */ window.onload = sorttable.init; // written by Dean Edwards, 2005 // with input from Tino Zijdel, Matthias Miller, Diego Perini // http://dean.edwards.name/weblog/2005/10/add-event/ function dean_addEvent(element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else { // assign each event handler a unique ID if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; // create a hash table of event types for the element if (!element.events) element.events = {}; // create a hash table of event handlers for each element/event pair var handlers = element.events[type]; if (!handlers) { handlers = element.events[type] = {}; // store the existing event handler (if there is one) if (element["on" + type]) { handlers[0] = element["on" + type]; } } // store the event handler in the hash table handlers[handler.$$guid] = handler; // assign a global event handler to do all the work element["on" + type] = handleEvent; } }; // a counter used to create unique IDs dean_addEvent.guid = 1; function removeEvent(element, type, handler) { if (element.removeEventListener) { element.removeEventListener(type, handler, false); } else { // delete the event handler from the hash table if (element.events && element.events[type]) { delete element.events[type][handler.$$guid]; } } }; function handleEvent(event) { var returnValue = true; // grab the event object (IE uses a global event object) event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); // get a reference to the hash table of event handlers var handlers = this.events[event.type]; // execute each event handler for (var i in handlers) { this.$$handleEvent = handlers[i]; if (this.$$handleEvent(event) === false) { returnValue = false; } } return returnValue; }; function fixEvent(event) { // add W3C standard event methods event.preventDefault = fixEvent.preventDefault; event.stopPropagation = fixEvent.stopPropagation; return event; }; fixEvent.preventDefault = function() { this.returnValue = false; }; fixEvent.stopPropagation = function() { this.cancelBubble = true; } // Dean's forEach: http://dean.edwards.name/base/forEach.js /* forEach, version 1.0 Copyright 2006, Dean Edwards License: http://www.opensource.org/licenses/mit-license.php */ // array-like enumeration if (!Array.forEach) { // mozilla already supports this Array.forEach = function(array, block, context) { for (var i = 0; i < array.length; i++) { block.call(context, array[i], i, array); } }; } // generic enumeration Function.prototype.forEach = function(object, block, context) { for (var key in object) { if (typeof this.prototype[key] == "undefined") { block.call(context, object[key], key, object); } } }; // character enumeration String.forEach = function(string, block, context) { Array.forEach(string.split(""), function(chr, index) { block.call(context, chr, index, string); }); }; // globally resolve forEach enumeration var forEach = function(object, block, context) { if (object) { var resolve = Object; // default if (object instanceof Function) { // functions have a "length" property resolve = Function; } else if (object.forEach instanceof Function) { // the object implements a custom forEach method so use that object.forEach(block, context); return; } else if (typeof object == "string") { // the object is a string resolve = String; } else if (typeof object.length == "number") { // the object is array-like resolve = Array; } resolve.forEach(object, block, context); } }; sorttable.sort_alpha = function(a,b) { return a[0].localeCompare(b[0]); } /*]]>*/</script> <!-- Google Tag Manager --> <script>/*<![CDATA[*/(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-KXCRM3P');/*]]>*/</script> <!-- End Google Tag Manager --> <!-- OneTrust Cookies Consent Notice start for knowledge.exlibrisgroup.com --> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="7286c7d4-44c2-4d10-b708-69445acbcc6a"></script> <script type="text/javascript">/*<![CDATA[*/ function OptanonWrapper() { } /*]]>*/</script> <!-- OneTrust Cookies Consent Notice end for knowledge.exlibrisgroup.com --> <!--temp baidu indexing token--> <script type="text/javascript" nonce="14c6c8309dfb1f8a12009bb45a09fb77c7ffa09864aa9e14a43315566463badc">(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create','UA-71378210-1','knowledge.exlibrisgroup.com',{allowLinker:true});ga('send','pageview');ga('create','UA-65721316-17','knowledge.exlibrisgroup.com',{name:'mtTracker',allowLinker:true});ga('mtTracker.require','linker');ga('mtTracker.set', 'anonymizeIp', true);ga('mtTracker.send','pageview');document.addEventListener('mindtouch-web-widget:f1:loaded',function(e){var t=e.data||{},d=t.widget;d&&''!==t.embedId&&document.addEventListener('mindtouch-web-widget:f1:clicked',function(e){var t=(e.data||{}).href;if(t){var n=document.createElement('a');n.setAttribute('href',t),'expert-help.nice.com'===n.hostname&&(e.preventDefault(),ga('linker:decorate',n),d.open(n.href))}})});</script> </head> <body class="columbia-page-main columbia-article-topic columbia-breadcrumb-home-leganto-knowledgearticles-identifyinginternalipaddresses columbia-live no-touch columbia-lang-en-us columbia-skin-grape"> <div class="grape-messaging"> </div> <div class="grape-header-custom"><div class="elm-nav-container"><div class="elm-header-logo-container"><a title="ExLibris" href="https://knowledge.exlibrisgroup.com/" rel="internal"><img alt="ExLibris" class="internal" loading="lazy" src="https://knowledge.exlibrisgroup.com/@api/deki/files/124993/ckclogonew.png?revision=1" /></a><div class="header-navigation-buttons"><div class="more-sites-container ex-dropdown"><select class="more-sites"><option value="">More Sites</option><option value="/Redirect_Corp">Exlibris Site</option><option value="http://support.proquest.com/">Support Center</option><option value="https://trust.exlibrisgroup.com/">ExLibris Trust Center</option><option value="/pageForRedirect?source=DeveloperNetwork2">Developer Network</option><option value="http://ideas.exlibrisgroup.com/">Idea Exchange</option></select></div><a href="https://status.exlibrisgroup.com/system_status" target="_blank" rel="external noopener nofollow" class="link-https"><button class="system-status-container btn-margin">System-Status</button></a><button class="submit-case">Submit a Case</button></div></div></div> <script type="text/javascript">/*<![CDATA[*/ $(function() { // MORE SITES DROPDOWN $("select.more-sites").on("click", function() { var val = $(this).val(); if (val != "") { $(this).prop("selectedIndex", 0); window.open(val, "_blank"); } }); // SYSTEM STATUS DROPDOWN $("select.system-status").on("click", function() { var val = $(this).val(); ga('send', 'event', { eventCategory: 'systemStatus', eventAction: 'systemStatusClick', eventLabel: 'systemStatus' }); if (val != "") { $(this).prop("selectedIndex", 0); window.open(val, "_blank"); } }); // SUBMIT A CASE BUTTON $(".submit-case").on("click", function() { window.open("https://support.proquest.com/s/submit-a-case", "_blank"); }); });/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(function() { var toc_container = $("#mt-toc-container"); if (toc_container.is(":visible")) { // make the contents of the TOC container visible by default $("button.mt-toggle", toc_container) .removeClass("mt-toggle-expand") .addClass("mt-toggle-collapse"); $(".mt-toc-content").show(); } }); /*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(function() { var pagenavigation = $(".elm-meta-article-navigation"); if (pagenavigation.length) { var content_container = $("section.mt-content-container"); pagenavigation.clone().insertBefore(content_container).addClass("article-top-navigation"); } }); /*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(function() { var email_subject = "Interesting article from the Exlibris Knowledge Center"; var body_text = "You may be interested in this resource from the Ex Libris Knowledge Center:"; var current_page = window.location.href; var meta_icons = $("ol.elm-meta-top"); if (meta_icons.length) { var new_link_container = $("<li></li>", { "class": "elm-page-share" }); var new_link = $("<a></a>", { "href": "mailto:?subject=" + email_subject + "&body=" + body_text + " " + current_page, "title": "Share page by email", "class": "elm-page-share-link" }); var new_icon = $("<span></span>", { "text": "Share page by email", "class": "mt-icon-mail5" }); new_link.append(new_icon); new_link_container.append(new_link); meta_icons.prepend(new_link_container); $("a.elm-page-share-link").on("click", function() { ga('send', 'event', { eventCategory: 'Share', eventAction: 'SharePageByEmail', eventLabel: current_page }); }); } }); /*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(function() { if (!$("body").hasClass("columbia-article-topic")) { var Content = $("section.mt-content-container"); var PDFLink = $("a.SectionPDF", Content); var SocialLink = $(".elm-social-share"); if (PDFLink.length) { var new_link_container = $("<li></li>", { "class": "elm-pdf-download" }); var new_link = $("<a></a>", { "href": PDFLink.attr("href"), "title": "Download PDF" }); var new_icon = $("<span></span>", { "text": "Download PDF", "class": "mt-icon-file-pdf" }); new_link.append(new_icon); new_link_container.append(new_link); new_link_container.insertBefore(SocialLink); PDFLink.closest("div").hide(); } } });/*]]>*/</script> <div id="back-to-top"><a href="#"><span class="mt-icon-arrow-up7"></span></a></div> <script type="text/javascript">/*<![CDATA[*/ $(document).scroll(function() { var pageTop = $(this).scrollTop(); var backToTop = $('#back-to-top'); if (pageTop > 800) { backToTop.fadeIn(); } else { backToTop.fadeOut(); } }); /*]]>*/</script> <script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script> <script type="text/javascript">/*<![CDATA[*/ let firstOpen = true; const chatWindowStateKey = "chatWindowState"; const uniqueIdKey = 'conversationInfoToken'; const uniqueIdKeyExpDate = 'conversationInfoTokenExpDate'; document.addEventListener("DOMContentLoaded", function() { const chatButton = document.getElementById("chat-button"); const chatWindow = document.getElementById("chatBody"); const chatBodyHeadingClose = document.getElementById("chatBodyHeadingClose"); const chatWindowState = localStorage.getItem(chatWindowStateKey); // This is a walkaround to the problem that the HTML editor changes the html after each edit... chatButton.innerHTML = atob("PGRpdiBjbGFzcz0iY2hhdC1idXR0b24tdGV4dCI+S05PV0xFREdFIEFTU0lTVEFOVDwvZGl2Pg0KCQk8c3BhbiBjbGFzcz0iY2hhdC1ib2R5LWhlYWRpbmctdGl0bGUtYmV0YSIgc3R5bGU9IiI+QkVUQTwvc3Bhbj4NCgkJPGRpdiBjbGFzcz0iY2hhdC1idXR0b24taWNvbiI+DQoJCQk8c3ZnIGNsYXNzPSJjaGF0LWJ1dHRvbi1pY29uLXN2ZyIgZmlsbD0iI2ZmZmZmZiIgdmlld2JveD0iMCAwIDE2IDE2Ij4gDQoJCQkJPHBhdGggY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNTYyNyA5LjU5ODIzQzcuNjQxMTMgOS41OTgyMyA1LjI4MTM3IDcuMjI5MTEgNS4yODEzNyA0LjMxNjg2QzUuMjgxMzcgNy4yMjkxMSAyLjkxMjI1IDkuNTk4MjMgMCA5LjU5ODIzQzIuOTEyMjUgOS41OTgyMyA1LjI4MTM3IDExLjk1OCA1LjI4MTM3IDE0Ljg3MDJDNS4yODEzNyAxMS45NTggNy42NDExMyA5LjU5ODIzIDEwLjU2MjcgOS41OTgyM1oiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPiANCgkJCQk8cGF0aCBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNS45ODQ4IDEyLjMyMzRDMTQuMzgzNSAxMi4zMjM0IDEzLjA5MTMgMTEuMDIxOCAxMy4wOTEzIDkuNDI5OUMxMy4wOTEzIDExLjAyMTggMTEuNzg5NyAxMi4zMjM0IDEwLjE5NzggMTIuMzIzNEMxMS43ODk3IDEyLjMyMzQgMTMuMDkxMyAxMy42MTU3IDEzLjA5MTMgMTUuMjE2OUMxMy4wOTEzIDEzLjYxNTcgMTQuMzgzNSAxMi4zMjM0IDE1Ljk4NDggMTIuMzIzNFoiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPiANCgkJCQk8cGF0aCBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC4zMTc3IDMuNTIwOTFDMTIuMzcgMy41MjA5MSAxMC43OTY4IDEuOTQ3NzQgMTAuNzk2OCAwQzEwLjc5NjggMS45NDc3NCA5LjIyMzYyIDMuNTIwOTEgNy4yNzU4OCAzLjUyMDkxQzkuMjIzNjIgMy41MjA5MSAxMC43OTY4IDUuMDk0MDkgMTAuNzk2OCA3LjA0MTgzQzEwLjc5NjggNS4wOTQwOSAxMi4zNyAzLjUyMDkxIDE0LjMxNzcgMy41MjA5MVoiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPiANCgkJCTwvc3ZnPg0KCQk8L2Rpdj4="); if (chatWindowState === "open") { openFirstChat(); firstOpen = false; chatWindow.style.display = "block"; } // Toggle chat window visibility chatBodyHeadingClose.addEventListener("click", function() { localStorage.setItem(chatWindowStateKey, "closed"); }); // Toggle chat window visibility chatButton.addEventListener("click", function() { if(firstOpen){ openFirstChat(); firstOpen = false; } localStorage.setItem(chatWindowStateKey, "open"); }); }); const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => { if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') { dispatch({ type: 'WEB_CHAT/SEND_EVENT', payload: { name: 'startConversation', value: { language: window.navigator.language } } }); } return next(action); }); const styleOptions = { // Add styleOptions to customize Web Chat canvas hideUploadButton: true, accent: '#00809d', botAvatarBackgroundColor: 'rgba(168,122,224,1)', botAvatarImage: 'https://knowledge.exlibrisgroup.com/@api/deki/files/174178/AI_Icon.png', botAvatarInitials: 'BT', userAvatarBackgroundColor: 'rgb(132 119 230)', userAvatarImage: 'https://knowledge.exlibrisgroup.com/@api/deki/files/174179/User_icon.png', userAvatarInitials: 'U', rootWidth: '360px', backgroundColor: 'transparent', sendBoxBorderTop: undefined, sendBoxBackground: 'transparent', sendBoxPlaceholderColor: '#424242', bubbleFromUserBackground: '#dae0ff', bubbleFromUserBorderRadius: '12px', bubbleFromUserBorderWidth: '0px', bubbleBorderRadius: '12px', }; // Add your BOT token endpoint below var theURL = "https://default127fa96e00b4429e95f972c2828437.a4.environment.api.powerplatform.com/powervirtualagents/botsbyschema/cr29b_knowledgeAssistantAcademic/directline/token?api-version=2022-03-01-preview"; var environmentEndPoint = theURL.slice(0, theURL.indexOf('/powervirtualagents')); var apiVersion = theURL.slice(theURL.indexOf('api-version')).split('=')[1]; var regionalChannelSettingsURL = `${environmentEndPoint}/powervirtualagents/regionalchannelsettings?api-version=${apiVersion}`; var directline; let conversationInfoStorage = sessionStorage.getItem(uniqueIdKey); let conversationInfoStorageExpDate = sessionStorage.getItem(uniqueIdKeyExpDate); function fetchConverstion() { if (!conversationInfoStorage || !conversationInfoStorageExpDate || (conversationInfoStorageExpDate < (new Date()).getTime())) { fetch(theURL) .then(response => response.json()) .then(conversationInfo => { sessionStorage.setItem(uniqueIdKey, conversationInfo.token); sessionStorage.setItem(uniqueIdKeyExpDate, (new Date()).getTime() + conversationInfo.expires_in * 1000); window.WebChat.renderWebChat({ directLine: window.WebChat.createDirectLine({ domain: `${directline}v3/directline`, token: conversationInfo.token, }), store, styleOptions }, document.getElementById('webchat') ); }) .catch(err => console.error("An error occurred: " + err)); } else { window.WebChat.renderWebChat({ directLine: window.WebChat.createDirectLine({ domain: `${directline}v3/directline`, token: conversationInfoStorage, }), styleOptions }, document.getElementById('webchat') ); } } function openFirstChat(){ fetch(regionalChannelSettingsURL) .then((response) => { return response.json(); }) .then((data) => { directline = data.channelUrlsById.directline; fetchConverstion(); }) .catch(err => console.error("An error occurred: " + err)); }/*]]>*/</script> <p><button id="chat-button" onclick="document.getElementById('chatBody').style.display = 'block'"></button></p> <div class="chat-body" id="chatBody" style="display:none"> <div class="chat-body-heading" id="heading"> <div class="chat-body-heading-title"><svg class="chat-body-heading-title-icon" fill="none" height="25" viewbox="0 0 26 25" width="26"> <path clip-rule="evenodd" d="M17.1645 15.5971C12.4168 15.5971 8.58223 11.7473 8.58223 7.01489C8.58223 11.7473 4.7324 15.5971 0 15.5971C4.7324 15.5971 8.58223 19.4317 8.58223 24.1641C8.58223 19.4317 12.4168 15.5971 17.1645 15.5971Z" fill="url(#paint0_radial_249_166)" fill-rule="evenodd"></path> <path clip-rule="evenodd" d="M25.9747 20.0256C23.3727 20.0256 21.2728 17.9105 21.2728 15.3236C21.2728 17.9105 19.1576 20.0256 16.5708 20.0256C19.1576 20.0256 21.2728 22.1255 21.2728 24.7275C21.2728 22.1255 23.3727 20.0256 25.9747 20.0256Z" fill="url(#paint1_radial_249_166)" fill-rule="evenodd"></path> <path clip-rule="evenodd" d="M23.2662 5.72148C20.1011 5.72148 17.5447 3.16508 17.5447 0C17.5447 3.16508 14.9883 5.72148 11.8232 5.72148C14.9883 5.72148 17.5447 8.27789 17.5447 11.443C17.5447 8.27789 20.1011 5.72148 23.2662 5.72148Z" fill="url(#paint2_radial_249_166)" fill-rule="evenodd"></path> <defs> <radialgradient cx="0" cy="0" gradienttransform="translate(10.8437 23.7164) rotate(-90) scale(15.9625 19.6815)" gradientunits="userSpaceOnUse" id="paint0_radial_249_166" r="1"> <stop stop-color="#B175E1"></stop> <stop offset="1" stop-color="#3595F0"></stop> </radialgradient> <radialgradient cx="0" cy="0" gradienttransform="translate(22.5118 24.482) rotate(-90) scale(8.75318 10.7829)" gradientunits="userSpaceOnUse" id="paint1_radial_249_166" r="1"> <stop stop-color="#B175E1"></stop> <stop offset="1" stop-color="#3595F0"></stop> </radialgradient> <radialgradient cx="0" cy="0" gradienttransform="translate(19.0524 11.1442) rotate(-90) scale(10.6511 13.121)" gradientunits="userSpaceOnUse" id="paint2_radial_249_166" r="1"> <stop stop-color="#B175E1"></stop> <stop offset="1" stop-color="#3595F0"></stop> </radialgradient> </defs> </svg> <div mt-section-origin="Template:Copilot_Knowledge_Assistant" class="mt-section"><h1 class="chat-body-heading-title-text editable">Knowledge Assistant</h1> <span class="chat-body-heading-title-beta" style="">BETA</span></div></div> <button aria-label="Close" class="chat-body-heading-close" id="chatBodyHeadingClose" onclick="document.getElementById('chatBody').style.display = 'none'" title="Hide Chat"><svg fill="none" height="25" viewbox="0 0 24 25" width="24"> <mask height="25" id="mask0_358_81" maskunits="userSpaceOnUse" style="mask-type:alpha" width="24" x="0" y="0"> <rect fill="#D9D9D9" height="24" width="24" y="0.360596"></rect> </mask> <g mask="url(#mask0_358_81)"> <path d="M6.4 19.3606L5 17.9606L10.6 12.3606L5 6.7606L6.4 5.3606L12 10.9606L17.6 5.3606L19 6.7606L13.4 12.3606L19 17.9606L17.6 19.3606L12 13.7606L6.4 19.3606Z" fill="#666666"></path> </g> </svg></button></div> <div id="webchat" role="main"> <div role="progressbar" aria-label="Loading..." aria-live="assertive" data-automation-id="PageSpinner" data-testid="PageSpinner" class="fui-Spinner r82apo5"><span class="fui-Spinner__spinner rvgcg50 ___1xxu43e f1d2rq10 f1szoe96 fb52u90"><span class="fui-Spinner__spinnerTail rxov3xa"></span></span></div> </div> </div> <script type="text/javascript">/*<![CDATA[*/ $(function() { var document_path = window.location.pathname.split("/"); var path_depth = document_path.length-1; // the following pages all have one additional level above the 'product page' level var second_level_product_pages = ["Intota", "360_Services"]; // the following pages are the community corner sections which should have icons var second_level_additional_icons = ["Content_Corner"]; if ((path_depth == 1 && document_path[1].length) || (second_level_product_pages.indexOf(document_path[1]) != -1 && path_depth == 2) || (second_level_additional_icons.indexOf(document_path[2]) !== -1 && path_depth ==2)) { $("body").addClass("product-page"); } });/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(function () { // Only display the product link area when a link exists for the current page var FeaturedTopicsContainer = $(".featured-topics"); // limit appearance to top-level product pages if ( $("body").hasClass("product-page") && $("ul", FeaturedTopicsContainer).length >= 1 ) { var DestinationElement = $(".mt-category-container", "#elm-main-content"); FeaturedTopicsContainer.insertBefore(DestinationElement); } });/*]]>*/</script> <div class="product-link featured-topics"> </div> <script type="text/javascript">/*<![CDATA[*/ $(function () { // Only display the product link area when a link exists for the current page var ProductLinkContainer = $(".product-link"); // limit appearance to top-level product pages if ( $("body").hasClass("product-page") && $("p", ProductLinkContainer).length >= 1 ) { var DestinationElement = $("#elm-main-content"); ProductLinkContainer.appendTo(DestinationElement); } });/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ // This function adds a "language-options" class to the ul.sortable-listings container // which enables a class on the first-child li and makes it full width IF the page is // called "Product Documentation" (searched for in the body class) AND there is a title // containing the text "(English)" $(function() { if ( $('body').is('[class*="productdocumentation"]') ) { if ($('a[title*="(English)"]').length) { $('ul.mt-sortable-listings-container').addClass('language-options'); } } }); /*]]>*/</script> <li class="elm-page-rss-feed"><a href="#" title="Subscribe by RSS" class="generate-rss" target="_blank"><span class="mt-icon-rss">Subscribe by RSS</span></a></li> <script type="text/javascript">/*<![CDATA[*/ $(function() { // RSS link icon displayed on the current page var rss_link = $("a.generate-rss"); // address of the MindTouch page that calls the FetchRSS API var generator_address = "/createRSSFeed"; // address of the current page var current_url = window.location.href; // address to redirect user to var rss_address = generator_address + "?pageurl=" + current_url; // if the RSS link icon exists set up the onclick action and relocate the // icon to its desired display position if (rss_link.length) { rss_link.on("click", function(e) { e.preventDefault(); window.open(rss_address, "_blank"); }); $(".elm-page-rss-feed").prependTo(".elm-meta-data.elm-meta-top"); } });/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(function() { // RSS link icon displayed on the current page var rss_link = $("a.generate-rss"); // address of the MindTouch page that calls the FetchRSS API var generator_address = "/createRSSFeed"; // address of the current page var current_url = window.location.href; // address to redirect user to var rss_address = generator_address + "?pageurl=" + current_url; // if the RSS link icon exists set up the onclick action and relocate the // icon to its desired display position if (rss_link.length) { rss_link.on("click", function(e) { e.preventDefault(); window.open(rss_address, "_blank"); }); $(".elm-page-rss-feed").prependTo(".elm-meta-data.elm-meta-top"); } });/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(window).load(function() { var DetailedListingAreas = $("body.columbia-article-topic-category").find("dl.mt-listing-detailed"); DetailedListingAreas.each(function() { var Content = $("dd.mt-listing-detailed-subpages", $(this)); // Only make the changes if there are sub-pages to be displayed if ($("li", Content).length) { var Parent = $(this).parent(); /* parent li item */ var Trigger = Parent; var Title = $(".mt-listing-detailed-title", $(this)); var LinkAddress = Title.find("a").attr("href"); // shorten titles of sub-articles if necessary $("li a", Content).each(function() { var children = $(this).children(); var text = $(this).text(); if (text.length > 35) { $(this).text(text.substr(0,32) + "..."); $(this).prepend(children); } }); // create a button linking to the immediate sub-page var AllTopicLink = $("<button />", { class: "ex-listing-all", text: "Show all topics", }).on("click", function() { window.location=LinkAddress; }); var AllTopicLinkContainer = $("<li></li>"); AllTopicLinkContainer.append(AllTopicLink); $("ul", Content).append(AllTopicLinkContainer); // add the mouse actions Trigger.on("mouseenter", function() { Content.fadeIn("fast"); }); Trigger.on("mouseleave", function() { Content.hide(); }); } }); });/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(window).load(function() { if ($("body").hasClass("columbia-article-topic-guide")) { // remove the next/previous article links from the top of the page // can't be done in CSS although I can't ascertain for what reason $(".elm-meta-article-navigation").hide(); } // only apply this to Guide pages when viewed by non-administrator users if ($("body").hasClass("columbia-article-topic-guide") && !$("body").hasClass("elm-user-pro-edit")) { // hide the regular MT tabs $(".mt-guide-tabs-selectors").hide(); // hide the add tab button (not strictly necessary as it doesn't appear to non-admins, but nice for testing $(".mt-guide-add-button-container").hide(); // count the number of tabs on this page var numberOfTabs = $("li.mt-guide-tab").length; if (numberOfTabs > 1) { var guideTabContainer = $(".mt-guide-tabs-container"); // extract the link from each tab and insert it before the guide container $(".mt-guide-tab-link").each(function(index) { // get the ID of this link so that we can trigger a click event from the new element var link_id = $(this).attr("id"); // now have to remove the ID from the cloned element or we get stuck in a click-trigger loop var newLink = $(this) .clone() .removeAttr("id") .addClass("ex-tab-link"); // add an "active" class to the first of the new tab buttons if (index == 0) { newLink.addClass("active"); } // add the click trigger action to fire on the original when the new button is clicked // can't simply use a link as MT uses jQuery to load tab content newLink.on("click", function(e) { e.preventDefault(); $("a.ex-tab-link.active").not($(this)).removeClass("active"); $(this).addClass("active"); $("#" + link_id).trigger("click"); }); // finally: add the new link newLink.insertBefore(guideTabContainer); }); } } });/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(function() { var SearchTipsLink = '/Cross-Product/Knowledge_Articles/Tips_for_Advanced_Document_Searching_in_the_Customer_Knowledge_Center'; var NoResultsText = 'Search Tips:<br><br>Try using an exact phrase search ("my search") or the AND operator (my AND search).<br><br>Other useful search tips can be found <a href="' + SearchTipsLink + '">here</a>.'; function overrideSearchText() { var TextContainer = $("li.type-empty p"); if (TextContainer.length) { // override the no results found text $("li.type-empty p").html(NoResultsText).show(); // stop the task that searches for text clearInterval(TextSearch); } } if ($("body").hasClass("columbia-special-search")) { // Keep running the function in case search text appears var TextSearch = setInterval(overrideSearchText, 500); } }); /*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ $(function() { var PageRequested = window.location.href; var ReplacementHTML = "<strong>Sorry, the page </strong>" + PageRequested + "<strong> does not exist, or is no longer valid.</strong><br><br>"; ReplacementHTML = ReplacementHTML + "You may try searching the Knowledge Center for relevant information, or checking the following suggested pages:"; var Error404Container = $("#special-404"); if (Error404Container.length) { var NoticeParagraph = $("<p></p>").html(ReplacementHTML); Error404Container.prepend(NoticeParagraph); } }); /*]]>*/</script> <div class="elm-nav product-search-container"><div class="elm-nav-container product-search"><a class="back-button mt-icon-arrow-left8 internal" href="https://knowledge.exlibrisgroup.com/Leganto/Knowledge_Articles" rel="internal">Back</a><form action="/Special:Search" class="product-search-form"><div class="product-search-form-inner"><input type="text" name="search" class="product-search-text" placeholder="Search under current path"></input><button type="submit"><span class="mt-icon-search"></span></button><input type="hidden" name="path" class="page-path" value="Leganto/Knowledge_Articles/Identifying_internal_IP_addresses"></input><input type="hidden" name="product" class="page-path-product" value="Leganto"></input></div></form><div class="mt-page-thumbnail"><img alt="Leganto" class="internal" loading="lazy" src="https://knowledge.exlibrisgroup.com/@api/deki/files/57004/mindtouch.page%2523thumbnail?revision=1" /></div></div></div> <script type="text/javascript">/*<![CDATA[*/ $(function() { // Some items that we'll refer to throughout the code below var SearchContainer = $(".product-search-container"); // the container that wraps the search input and select menu var SearchInput = $(".product-search-text"); // the input field for search text var PageProduct = $(".page-path-product"); // the hidden form element containing the current product name var PagePath = $(".page-path"); // the hidden form element containing the current path // if the current path matches the product name (i.e. we are on the product home page) // hide the page title if (PageProduct.val() == PagePath.val()) { $("h1#title").hide(); } // we are on a product page and need to retrieve the parent page from the hidden form field var CurrentProduct = PageProduct.val(); // only continue if there's a product path available if (CurrentProduct.length) { // set the colour style SearchContainer.attr("title", CurrentProduct); } // Now move the search from the custom header block into its final location // this will automatically "reveal" the search as it picks up global styles var DestinationElement = $(".elm-header-global-nav"); SearchContainer.insertBefore(DestinationElement); // Prevent the form from being submitted without a search term $(".product-search-form").on("submit", function(event) { // cancel if no text for searching if (!SearchInput.val().length) { event.preventDefault(); return false; } }); });/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ document.documentElement.setAttribute('lang', 'en');/*]]>*/</script> <p> </p> <script type="text/javascript">/*<![CDATA[*/ // Add Roboto font Deki.Fonts.addGoogleFontFamily('Roboto:r,b,i');/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ /* Parse parameters */ var documentParams; function getDocumentParams() { if (!documentParams) { documentParams = {}; if (document.location.search) { var decodedSearch = decodeURIComponent(document.location.search.substring(1).replace('+', ' ')); var searchParams = decodedSearch.split(/&/); for (var i = 0; i < searchParams.length; i++) { var param = searchParams[i]; var match = param.match(/^([^=]+)=(.*)$/); if (match) { documentParams[match[1]] = match[2]; } } } } return documentParams; } function toggle(it,min,max) { if (!min) {min = 50}; if (!max) {max = 500}; if (it.width == min) {it.width = max;} else {it.width = min;} } /* * Optional sections processing * */ function initOptional() { /* Pivot */ var uxpParam = getDocumentParams().uxp; var uxpTrueElements = document.querySelectorAll(".CallOut"); if (uxpParam != "true") { for (var i = 0; i < uxpTrueElements.length; i++) { uxpTrueElements[i].style['display'] = 'none'; } } else if (uxpParam == "true") { var hrefs = document.getElementsByTagName('a'); for (var i = 0; i < hrefs.length; i++) { if (hrefs[i]['href'].indexOf('/Pivot/Product_Documentation') != -1 && hrefs[i]['href'].indexOf('uxp') == -1) { if (hrefs[i]['href'].indexOf('?') == -1) { if (hrefs[i]['href'].indexOf('#') == -1) { hrefs[i]['href'] += '?uxp=true'; } else { hrefs[i]['href'] = hrefs[i]['href'].replace('#','?uxp=true#'); } } else { hrefs[i]['href'] = hrefs[i]['href'].replace('?','?uxp=true&'); } } } } /* Release Notes: Process MON, CAT, and SER parameters */ var monParam = getDocumentParams().mon; var catParam = getDocumentParams().cat; var serParam = getDocumentParams().ser; if (monParam && document.getElementById('rnMonthList')) { document.getElementById('rnMonthList').value=monParam; if (catParam && document.getElementById('rnCatList')) { document.getElementById('rnCatList').value=catParam; } if (serParam && document.getElementById('rnSearchList')) { document.getElementById('rnSearchList').value=serParam; } filterRN(); } else if (document.getElementById('rnMonthList')) { if (catParam && document.getElementById('rnCatList')) { document.getElementById("rnMonthList").value="All"; document.getElementById('rnCatList').value=catParam; } if (serParam && document.getElementById('rnSearchList')) { document.getElementById("rnMonthList").value="All"; document.getElementById('rnSearchList').value=serParam; } filterRN(); } }/*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ //google analytics feedback buttons $(function() { $( 'button.mt-rating-button-no' ).click(function() { ga('send', 'event', { eventCategory: 'badFeedback', eventAction: 'badFeedbackClick', eventLabel: 'badFeedback' }); }); $( 'button.mt-rating-button-yes' ).click(function() { ga('send', 'event', { eventCategory: 'goodFeedback', eventAction: 'goodFeedbackClick', eventLabel: 'goodFeedback' }); }); // See pageForRedirect and LogoAndNavigation templates for additional action captures // as these needed changing from previous onclick handlers due to alteration of elements // from javascript pop-ups to standard "select" elements });/*]]>*/</script> </div> <div class="grape-header grape-wrapper"> <div class="grape-header-container grape-wrapper-container"> <div class="grape-site-logo"> <a class="logo-anonymous" href="/" title="Ex Libris Knowledge Center"> <img class="mt-cdn" src="https://a.mtstatic.com/@public/production/site_11811/1638394879-logo.png" alt="Ex Libris Knowledge Center" title="Ex Libris Knowledge Center"> </a> </div> <div class="grape-site-navigation"> <ul class="mt-site-nav"> <li class="mt-login-sign-in"> <a class="mt-icon-quick-sign-in" href="https://knowledge.exlibrisgroup.com/Special:UserLogin?returntotitle=Leganto%2FKnowledge_Articles%2FIdentifying_internal_IP_addresses" title="Sign in"> Sign in </a> </li> <li class="mt-login-forgot-password"> <a class="mt-icon-login-forgot-password" href="https://knowledge.exlibrisgroup.com/Special:UserPassword" title="Retrieve lost password"> Forgot password </a> </li> </ul> </div> <div class="grape-site-search"> <div class="mt-quick-search-container"> <form action="/Special:Search"> <input name="path" id="mt-search-path" type="hidden" value="/Leganto/Knowledge_Articles/Identifying_internal_IP_addresses" /> <label class="mt-label" for="mt-site-search-input"> Search </label> <input class="mt-text mt-search search-field" name="q" id="mt-site-search-input" placeholder="How can we help you?" type="search" /> <button class="mt-button ui-button-icon mt-icon-site-search-button search-button" type="submit"> Search </button> </form> </div> </div> </div> <div class="grape-site-nav grape-wrapper-container"> <ul class="mt-breadcrumbs"> <li> <a href="https://knowledge.exlibrisgroup.com/"> <span class="mt-icon-article-guide mt-icon-article-home"></span> Home </a> </li> <li> <a href="https://knowledge.exlibrisgroup.com/Leganto"> <span class="mt-icon-article-category"></span> Leganto </a> </li> <li> <a href="https://knowledge.exlibrisgroup.com/Leganto/Knowledge_Articles"> <span class="mt-icon-article-guide"></span> Knowledge Articles </a> </li> </ul> </div> </div> <div class="grape-content grape-wrapper"> <div class="grape-content-container grape-wrapper-container"> <div id="flash-messages"><div class="dekiFlash"></div></div> <h1 id="title" class="no-edit" style="visibility: visible;"> Identifying internal IP addresses </h1> <div class="mt-last-updated"> <strong>Last updated:</strong> <span class="modified mt-last-updated-timestamp" data-timestamp="2015-12-09T04:53:15Z"></span> </div> <div class="mt-content-header"></div> <div class="mt-content-side"></div> <div id="mt-toc-container" data-title="Table of contents" data-collapsed="true"> <button class="mt-toggle mt-summary-toggle ui-button-icon mt-toggle-expand">Table of contents</button> <div class="mt-toc-content mt-collapsible-section mt-toc-hide"> <ol><li><a href="#Question" rel="internal">Question</a></li><li><a href="#Answer" rel="internal">Answer</a></li><li><a href="#Additional_Information" rel="internal">Additional Information</a></li></ol> </div> </div> <div id="page-top"> <div id="topic"> <div id="pageText"> <div class="mt-include" id="s34772"><ul class="knowledge_base_list"> <li><strong>Article Type:</strong> Q&A</li> <li><strong>Product:</strong> Cross-Product</li> </ul> <hr class="clear" /> <div mt-section-origin="Cross-Product/Knowledge_Articles/Identifying_internal_IP_addresses" class="mt-section" id="section_1"><span id="Question"></span><h4 id="Question-34772">Question</h4> <p>How can we distinguish "internal" ip addresses from "external"?</p> </div><div mt-section-origin="Cross-Product/Knowledge_Articles/Identifying_internal_IP_addresses" class="mt-section" id="section_2"><span id="Answer"></span><h4 id="Answer-34772">Answer</h4> <p>Whether an IP address is internal or not can be identified by the IP range it belongs to. The Internet Assigned Numbers Authority (IANA) has reserved the following three blocks of the IP address space for private internets:<br /> <br /> 10.0.0.0 - 10.255.255.255 (10/8 prefix)<br /> 172.16.0.0 - 172.31.255.255 (172.16/12 prefix)<br /> 192.168.0.0 - 192.168.255.255 (192.168/16 prefix)</p> </div><div mt-section-origin="Cross-Product/Knowledge_Articles/Identifying_internal_IP_addresses" class="mt-section" id="section_3"><span id="Additional_Information"></span><h4 id="Additional_Information-34772">Additional Information</h4> <p>More details on this topic (RFC 1918 - "Address Allocation for Private Internets") can be found at: <a target="_blank" href="http://www.faqs.org/rfcs/rfc1918.html" rel="external noopener nofollow" class="external">http://www.faqs.org/rfcs/rfc1918.html</a></p> <p> </p> <hr class="clear" /> <ul class="knowledge_base_list"> <li><strong>Article last edited:</strong> 15-Jan-2014</li> </ul> </div></div> </div> </div> </div> <div class="mt-content-footer"> <div style="display: none"><a href="https://knowledge.exlibrisgroup.com/Leganto/Knowledge_Articles/Identifying_internal_IP_addresses?v=1" rel="internal" class="rss-page-link internal">View article in the Exlibris Knowledge Center</a></div> </div> <ol class="grape-meta-data grape-meta-article-navigation"> <li class="grape-back-to-top"><a class="mt-icon-back-to-top" href="#title" id="mt-back-to-top" title="Jump back to top of this article">Back to top</a></li> <li class="grape-article-pagination"><ul class="mt-article-pagination"> <li class="mt-pagination-previous"> <a class="mt-icon-previous-article" href="https://knowledge.exlibrisgroup.com/Leganto/Knowledge_Articles/How_to_Hide_Incomplete_Citations_from_Students_Who_Use_Leganto" title="How to Hide Incomplete Citations from Students Who Use Leganto"><span>How to Hide Incomplete Citations from Students Who Use Leganto</span></a> </li> <li class="mt-pagination-next"> <a class="mt-icon-next-article" href="https://knowledge.exlibrisgroup.com/Leganto/Knowledge_Articles/In_Leganto_what_do_'LMS'%2C_'CMS'%2C_and_'VLE'_stand_for%3F" title="In Leganto what do 'LMS', 'CMS', and 'VLE' stand for?"><span>In Leganto what do 'LMS', 'CMS', and 'VLE' stand for?</span></a> </li> </ul> </li> </ol> </div> </div> <div class="grape-footer grape-wrapper"> <div class="grape-wrapper-container"> <ol> <li class="grape-footer-copyright">© Copyright 2024 Ex Libris Knowledge Center</li> <li class="grape-footer-powered-by"><a href="https://mindtouch.com/demo" class="mt-poweredby product " title="MindTouch" target="_blank"> Powered by CXone Expert <span class="mt-registered">®</span> </a></li> </ol> </div> </div> <div class="grape-footer-custom"><footer><div class="elm-nav-container"><div class="exlibris-footer"><ul id="useful_links"><li><a target="_self" href="https://knowledge.exlibrisgroup.com/TERMS_OF_USE" rel="internal">Term of Use</a></li><li><a target="_blank" href="https://www.exlibrisgroup.com/privacy-policy/" rel="external noopener nofollow" class="link-https">Privacy Policy</a></li><li id="teconsent"></li><li><a href="https://knowledge.exlibrisgroup.com/Cross-Product/Knowledge_Articles/How_to_contact_Ex_Libris_for_assistance_or_to_discuss_technical_matters" rel="internal">Contact Us</a></li></ul><span class="reserved">2024 Ex Libris. All rights reserved</span></div></div></footer> </div> <script>/*<![CDATA[*/ initOptional(); (function(){ var x = document.getElementsByClassName('lastModified'); for (var i = 0; i < x.length; i++) { var d = new Date(x[i].innerText); x[i].setAttribute('sorttable_customkey', d.toISOString().substring(0, 10)); } })(); /*]]>*/</script> <!--Feedback--> <script type="text/javascript">/*<![CDATA[*/ window.doorbellOptions = { "id": "2602", "appKey": "Qo1eqHoGxyAyBumYthdr9YjCAxeowyUw8hdj2EJ2bgPomMf5IeNGpABlK1QGmq42" }; (function(w, d, t) { var hasLoaded = false; function l() { if (hasLoaded) { return; } hasLoaded = true; window.doorbellOptions.windowLoaded = true; var g = d.createElement(t);g.id = 'doorbellScript';g.type = 'text/javascript';g.async = true;g.src = 'https://embed.doorbell.io/button/'+window.doorbellOptions['id']+'?t='+(new Date().getTime());(d.getElementsByTagName('head')[0]||d.getElementsByTagName('body')[0]).appendChild(g); } if (w.attachEvent) { w.attachEvent('onload', l); } else if (w.addEventListener) { w.addEventListener('load', l, false); } else { l(); } if (d.readyState == 'complete') { l(); } }(window, document, 'script')); /*]]>*/</script> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KXCRM3P" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> </body> </html>