PageSourceSearch

https://otacon22.com/

html otacon22.com collected 2026-10-06 05:25:31 UTC 144,147 bytes, 1,368 lines download raw bytes

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml" lang="it-IT">
3<head profile="http://gmpg.org/xfn/11">
4
5	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6	<title>Otacon22 blog</title>
7 	<meta name="description" content="" />
8	<!--[if IE]>
9	<link rel="stylesheet" href="https://s2.wp.com/wp-content/themes/pub/unsleepable/ie.css?m=1314316350i" type="text/css" media="screen" />
10	<![endif]-->
11	<!--[if IE 6]>
12	<link rel="stylesheet" href="https://s2.wp.com/wp-content/themes/pub/unsleepable/ie6.css?m=1221676594i" type="text/css" media="screen" />
13	<![endif]-->
14		<meta name='robots' content='max-image-preview:large' />
15
16<!-- Async WordPress.com Remote Login -->
17<script id="wpcom_remote_login_js">
18var wpcom_remote_login_extra_auth = '';
19function wpcom_remote_login_remove_dom_node_id( element_id ) {
20	var dom_node = document.getElementById( element_id );
21	if ( dom_node ) { dom_node.parentNode.removeChild( dom_node ); }
22}
23function wpcom_remote_login_remove_dom_node_classes( class_name ) {
24	var dom_nodes = document.querySelectorAll( '.' + class_name );
25	for ( var i = 0; i < dom_nodes.length; i++ ) {
26		dom_nodes[ i ].parentNode.removeChild( dom_nodes[ i ] );
27	}
28}
29function wpcom_remote_login_final_cleanup() {
30	wpcom_remote_login_remove_dom_node_classes( "wpcom_remote_login_msg" );
31	wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" );
32	wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_validate" );
33	wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_js" );
34	wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_iframe" );
35	wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_styles" );
36}
37
38// Watch for messages back from the remote login
39window.addEventListener( "message", function( e ) {
40	if ( e.origin === "https://r-login.wordpress.com" ) {
41		var data = {};
42		try {
43			data = JSON.parse( e.data );
44		} catch( e ) {
45			wpcom_remote_login_final_cleanup();
46			return;
47		}
48
49		if ( data.msg === 'LOGIN' ) {
50			// Clean up the login check iframe
51			wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" );
52
53			var id_regex = new RegExp( /^[0-9]+$/ );
54			var token_regex = new RegExp( /^.*|.*|.*$/ );
55			if (
56				token_regex.test( data.token )
57				&& id_regex.test( data.wpcomid )
58			) {
59				// We have everything we need to ask for a login
60				var script = document.createElement( "script" );
61				script.setAttribute( "id", "wpcom_remote_login_validate" );
62				script.src = '/remote-login.php?wpcom_remote_login=validate'
63					+ '&wpcomid=' + data.wpcomid
64					+ '&token=' + encodeURIComponent( data.token )
65					+ '&host=' + window.location.protocol
66					+ '//' + window.location.hostname
67					+ '&postid=493'
68					+ '&is_singular=';
69				document.body.appendChild( script );
70			}
71
72			return;
73		}
74
75		// Safari ITP, not logged in, so redirect
76		if ( data.msg === 'LOGIN-REDIRECT' ) {
77			window.location = 'https://wordpress.com/log-in?redirect_to=' + window.location.href;
78			return;
79		}
80
81		// Safari ITP, storage access failed, remove the request
82		if ( data.msg === 'LOGIN-REMOVE' ) {
83			var css_zap = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } @media screen and ( max-width: 782px ) { html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } }';
84			var style_zap = document.createElement( 'style' );
85			style_zap.type = 'text/css';
86			style_zap.appendChild( document.createTextNode( css_zap ) );
87			document.body.appendChild( style_zap );
88
89			var e = document.getElementById( 'wpcom_request_access_iframe' );
90			e.parentNode.removeChild( e );
91
92			document.cookie = 'wordpress_com_login_access=denied; path=/; max-age=31536000';
93
94			return;
95		}
96
97		// Safari ITP
98		if ( data.msg === 'REQUEST_ACCESS' ) {
99			console.log( 'request access: safari' );
100
101			// Check ITP iframe enable/disable knob
102			if ( wpcom_remote_login_extra_auth !== 'safari_itp_iframe' ) {
103				return;
104			}
105
106			// If we are in a "private window" there is no ITP.
107			var private_window = false;
108			try {
109				var opendb = window.openDatabase( null, null, null, null );
110			} catch( e ) {
111				private_window = true;
112			}
113
114			if ( private_window ) {
115				console.log( 'private window' );
116				return;
117			}
118
119			var iframe = document.createElement( 'iframe' );
120			iframe.id = 'wpcom_request_access_iframe';
121			iframe.setAttribute( 'scrolling', 'no' );
122			iframe.setAttribute( 'sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin allow-top-navigation-by-user-activation' );
123			iframe.src = 'https://r-login.wordpress.com/remote-login.php?wpcom_remote_login=request_access&origin=' + encodeURIComponent( data.origin ) + '&wpcomid=' + encodeURIComponent( data.wpcomid );
124
125			var css = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 46px !important; } * html body { margin-top: 46px !important; } @media screen and ( max-width: 660px ) { html { margin-top: 71px !important; } * html body { margin-top: 71px !important; } #wpcom_request_access_iframe { display: block; height: 71px !important; } } #wpcom_request_access_iframe { border: 0px; height: 46px; position: fixed; top: 0; left: 0; width: 100%; min-width: 100%; z-index: 99999; background: #23282d; } ';
126
127			var style = document.createElement( 'style' );
128			style.type = 'text/css';
129			style.id = 'wpcom_request_access_styles';
130			style.appendChild( document.createTextNode( css ) );
131			document.body.appendChild( style );
132
133			document.body.appendChild( iframe );
134		}
135
136		if ( data.msg === 'DONE' ) {
137			wpcom_remote_login_final_cleanup();
138		}
139	}
140}, false );
141
142// Inject the remote login iframe after the page has had a chance to load
143// more critical resources
144window.addEventListener( "DOMContentLoaded", function( e ) {
145	var iframe = document.createElement( "iframe" );
146	iframe.style.display = "none";
147	iframe.setAttribute( "scrolling", "no" );
148	iframe.setAttribute( "id", "wpcom_remote_login_key" );
149	iframe.src = "https://r-login.wordpress.com/remote-login.php"
150		+ "?wpcom_remote_login=key"
151		+ "&origin=aHR0cHM6Ly9vdGFjb24yMi5jb20%3D"
152		+ "&wpcomid=326248"
153		+ "&time=" + Math.floor( Date.now() / 1000 );
154	document.body.appendChild( iframe );
155}, false );
156</script>
156
157<link rel='dns-prefetch' href='//s1.wp.com' />
158<link rel='dns-prefetch' href='//s2.wp.com' />
159<link rel='dns-prefetch' href='//s0.wp.com' />
160<link rel='dns-prefetch' href='//af.pubmine.com' />
161<link rel="alternate" type="application/rss+xml" title="Otacon22 blog &raquo; Feed" href="https://otacon22.com/feed/" />
162<link rel="alternate" type="application/rss+xml" title="Otacon22 blog &raquo; Feed dei commenti" href="https://otacon22.com/comments/feed/" />
163	
163<script type="text/javascript">
164		/* <![CDATA[ */
165		function addLoadEvent(func) {
166			var oldonload = window.onload;
167			if (typeof window.onload != 'function') {
168				window.onload = func;
169			} else {
170				window.onload = function () {
171					oldonload();
172					func();
173				}
174			}
175		}
176		/* ]]> */
177	</script>
177
178	<style id="wp-img-auto-sizes-contain-inline-css">
179img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
180/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
181</style>
182<link crossorigin='anonymous' rel='stylesheet' id='all-css-2-1' href='/_static/??-eJx9j90KwjAMhV/IGgvC2IX4LG0Xa7f0hyVl7O2t6GQieBM4ycl3OLAU5XISTAKxqkLVh8SwhMGjMGBt1zwFVGQWEIyFjCADy0p4dMwH2AEsZf9BRDNPKCF5Zc0Mzfq9+XnepY8oxbjprSHm/BxDpZYc0i2kIKjYzZlo0+s/3uYBuWNsjFIt1MSEWIx99bjGi+76k+51p8/jA7gUaHM=&cssminify=yes' type='text/css' media='all' />
183<style id="wp-emoji-styles-inline-css">
184
185	img.wp-smiley, img.emoji {
186		display: inline !important;
187		border: none !important;
188		box-shadow: none !important;
189		height: 1em !important;
190		width: 1em !important;
191		margin: 0 0.07em !important;
192		vertical-align: -0.1em !important;
193		background: none !important;
194		padding: 0 !important;
195	}
196/*# sourceURL=wp-emoji-styles-inline-css */
197</style>
198<style id="wp-block-library-inline-css">
199:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
199--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;overflow-wrap:normal!important;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
200
201/*# sourceURL=/wp-content/plugins/gutenberg-core/v24.1.0/build/styles/block-library/common.min.css */
202</style>
203<style id="wp-block-library-inline-css-extra">
204.has-text-align-justify {
205	text-align:justify;
206}
207.has-text-align-justify{text-align:justify;}
208/*# sourceURL=wp-block-library-inline-css */
209</style>
210
211<style id="classic-theme-styles-inline-css">
212.wp-block-button__link{background-color:#32373c;border-radius:9999px;box-shadow:none;color:#fff;font-size:1.125em;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-file__button{background:#32373c;color:#fff}.wp-block-accordion-heading{margin:0}.wp-block-accordion-heading__toggle{background-color:inherit!important;color:inherit!important}.wp-block-accordion-heading__toggle:not(:focus-visible){outline:none}.wp-block-accordion-heading__toggle:focus,.wp-block-accordion-heading__toggle:hover{background-color:inherit!important;border:none;box-shadow:none;color:inherit;padding:var(--wp--preset--spacing--20,1em) 0;text-decoration:none}.wp-block-accordion-heading__toggle:focus-visible{outline:auto;outline-offset:0}.wp-block-tab:not(.has-text-color){color:inherit!important}.wp-block-tab:not(.has-background){background-color:inherit!important}.wp-block-tab:focus,.wp-block-tab:hover{text-decoration:none}.wp-block-tab:focus-visible{outline:auto;outline-offset:0}
213/*# sourceURL=/wp-content/plugins/gutenberg-core/v24.1.0/build/styles/block-library/classic.min.css */
214</style>
215
216<style id="coblocks-inline-format-inline-css">
217.uppercase{text-transform:uppercase}
218/*# sourceURL=coblocks-inline-format-inline-css */
219</style>
220<link crossorigin='anonymous' rel='stylesheet' id='all-css-12-1' href='/_static/??-eJx9jUsOwjAMRC+EY6UgCAvEWZrEKoG4jWq3hduTLvisurFG1nszuBQIQ6/UK5Y8dakXDIPPQ3gINsY6Y0ESl0ww0mwOGJPolwDRVyYTRHb4V8QT/L
220pGqn8ura4EU0wtZeKKbWlLih1p1eWTQem5rZQ6A96XkUSgXk4Tg97qlqzelS/26KzbN835dH8DjlpbIA==&cssminify=yes' type='text/css' media='all' />
221<style id="global-styles-inline-css">
222:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
222--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--albert-sans: 'Albert Sans', sans-serif;--wp--preset--font-family--alegreya: Alegreya, serif;--wp--preset--font-family--arvo: Arvo, serif;--wp--preset--font-family--bodoni-moda: 'Bodoni Moda', serif;--wp--preset--font-family--bricolage-grotesque: 'Bricolage Grotesque', sans-serif;--wp--preset--font-family--cabin: Cabin, sans-serif;--wp--preset--font-family--chivo: Chivo, sans-serif;--wp--preset--font-family--commissioner: Commissioner, sans-serif;--wp--preset--font-family--cormorant: Cormorant, serif;--wp--preset--font-family--courier-prime: 'Courier Prime', monospace;--wp--preset--font-family--crimson-pro: 'Crimson Pro', serif;--wp--preset--font-family--dm-mono: 'DM Mono', monospace;--wp--preset--font-family--dm-sans: 'DM Sans', sans-serif;--wp--preset--font-family--dm-serif-display: 'DM Serif Display', serif;--wp--preset--font-family--domine: Domine, serif;--wp--preset--font-family--eb-garamond: 'EB Garamond', serif;--wp--preset--font-family--epilogue: Epilogue, sans-serif;--wp--preset--font-family--fahkwang: Fahkwang, sans-serif;--wp--preset--font-family--figtree: Figtree, sans-serif;--wp--preset--font-family--fira-sans: 'Fira Sans', sans-serif;--wp--preset--font-family--fjalla-one: 'Fjalla One', sans-serif;--wp--preset--font-family--fraunces: Fraunces, serif;--wp--preset--font-family--gabarito: Gabarito, system-ui;--wp--preset--font-family--ibm-plex-mono: 'IBM Plex Mono', monospace;--wp--preset--font-family--ibm-plex-sans: 'IBM Plex Sans', sans-serif;--wp--preset--font-family--ibarra-real-nova: 'Ibarra Real Nova', serif;--wp--preset--font-family--instrument-serif: 'Instrument Serif', serif;--wp--preset--font-family--inter: Inter, sans-serif;--wp--preset--font-family--josefin-sans: 'Josefin Sans', sans-serif;--wp--preset--font-family--jost: Jost, sans-serif;--wp--preset--font-family--libre-baskerville: 'Libre Baskerville', serif;--wp--preset--font-family--libre-franklin: 'Libre Franklin', sans-serif;--wp--preset--font-family--literata: Literata, serif;--wp--preset--font-family--lora: Lora, serif;--wp--preset--font-family--merriweather: Merriweather, serif;--wp--preset--font-family--montserrat: Montserrat, sans-serif;--wp--preset--font-family--newsreader: Newsreader, serif;--wp--preset--font-family--noto-sans-mono: 'Noto Sans Mono', sans-serif;--wp--preset--font-family--nunito: Nunito, sans-serif;--wp--preset--font-family--open-sans: 'Open Sans', sans-serif;--wp--preset--font-family--overpass: Overpass, sans-serif;--wp--preset--font-family--pt-serif: 'PT Serif', serif;--wp--preset--font-family--petrona: Petrona, serif;--wp--preset--font-family--piazzolla: Piazzolla, serif;--wp--preset--font-family--playfair-display: 'Playfair Display', serif;--wp--preset--font-family--plus-jakarta-sans: 'Plus Jakarta Sans', sans-serif;--wp--preset--font-family--poppins: Poppins, sans-serif;--wp--preset--font-family--raleway: Raleway, sans-serif;--wp--preset--font-family--roboto: Roboto, sans-serif;--wp--preset--font-family--roboto-slab: 'Roboto Slab', serif;--wp--preset--font-family--rubik: Rubik, sans-serif;--wp--preset--font-family--rufina: Rufina, serif;--wp--preset--font-family--sora: Sora, sans-serif;--wp--preset--font-family--source-sans-3: 'Source Sans 3', sans-serif;--wp--preset--font-family--source-serif-4: 'Source Serif 4', serif;--wp--preset--font-family--space-mono: 'Space Mono', monospace;--wp--preset--font-family--syne: Syne, sans-serif;--wp--preset--font-family--texturina: Texturina, serif;--wp--preset--font-family--urbanist: Urbanist, sans-serif;--wp--preset--font-family--work-sans: 'Work Sans', sans-serif;--wp--preset--text-shadow--light: 0.05em 0.05em 0.1em rgba(0, 0, 0, 0.3);--wp--preset--text-shadow--strong: 0.1em 0.1em 0.25em rgba(0, 0, 0, 0.5);--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
222.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-albert-sans-font-family{font-family: var(--wp--preset--font-family--albert-sans) !important;}.has-alegreya-font-family{font-family: var(--wp--preset--font-family--alegreya) !important;}.has-arvo-font-family{font-family: var(--wp--preset--font-family--arvo) !important;}.has-bodoni-moda-font-family{font-family: var(--wp--preset--font-family--bodoni-moda) !important;}.has-bricolage-grotesque-font-family{font-family: var(--wp--preset--font-family--bricolage-grotesque) !important;}.has-cabin-font-family{font-family: var(--wp--preset--font-family--cabin) !important;}.has-chivo-font-family{font-family: var(--wp--preset--font-family--chivo) !important;}.has-commissioner-font-family{font-family: var(--wp--preset--font-family--commissioner) !important;}.has-cormorant-font-family{font-family: var(--wp--preset--font-family--cormorant) !important;}.has-courier-prime-font-family{font-family: var(--wp--preset--font-family--courier-prime) !important;}.has-crimson-pro-font-family{font-family: var(--wp--preset--font-family--crimson-pro) !important;}.has-dm-mono-font-family{font-family: var(--wp--preset--font-family--dm-mono) !important;}.has-dm-sans-font-family{font-family: var(--wp--preset--font-family--dm-sans) !important;}.has-dm-serif-display-font-family{font-family: var(--wp--preset--font-family--dm-serif-display) !important;}.has-domine-font-family{font-family: var(--wp--preset--font-family--domine) !important;}.has-eb-garamond-font-family{font-family: var(--wp--preset--font-family--eb-garamond) !important;}.has-epilogue-font-family{font-family: var(--wp--preset--font-family--epilogue) !important;}.has-fahkwang-font-family{font-family: var(--wp--preset--font-family--fahkwang) !important;}.has-figtree-font-family{font-family: var(--wp--preset--font-family--figtree) !important;}.has-fira-sans-font-family{font-family: var(--wp--preset--font-family--fira-sans) !important;}.has-fjalla-one-font-family{font-family: var(--wp--preset--font-family--fjalla-one) !important;}.has-fraunces-font-family{font-family: var(--wp--preset--font-family--fraunces) !important;}.has-gabarito-font-family{font-family: var(--wp--preset--font-family--gabarito) !important;}.has-ibm-plex-mono-font-family{font-family: var(--wp--preset--font-family--ibm-plex-mono) !important;}.has-ibm-plex-sans-font-family{font-family: var(--wp--preset--font-family--ibm-plex-sans) !important;}.has-ibarra-real-nova-font-family{font-family: var(--wp--preset--font-family--ibarra-real-nova) !important;}.has-instrument-serif-font-family{font-family: var(--wp--preset--font-family--instrument-serif) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-josefin-sans-font-family{font-family: var(--wp--preset--font-family--josefin-sans) !important;}.has-jost-font-family{font-family: var(--wp--preset--font-family--jost) !important;}.has-libre-baskerville-font-family{font-family: var(--wp--preset--font-family--libre-baskerville) !important;}.has-libre-franklin-font-family{font-family: var(--wp--preset--font-family--libre-franklin) !important;}.has-literata-font-family{font-family: var(--wp--preset--font-family--literata) !important;}.has-lora-font-family{font-family: var(--wp--preset--font-family--lora) !important;}.has-merriweather-font-family{font-family: var(--wp--preset--font-family--merriweather) !important;}.has-montserrat-font-family{font-family: var(--wp--preset--font-family--montserrat) !important;}.has-newsreader-font-family{font-family: var(--wp--preset--font-family--newsreader) !important;}.has-noto-sans-mono-font-family{font-family: var(--wp--preset--font-family--noto-sans-mono) !important;}.has-nunito-font-family{font-family: var(--wp--preset--font-family--nunito) !important;}.has-open-sans-font-family{font-family: var(--wp--preset--font-family--open-sans) !important;}.has-overpass-font-family{font-family: var(--wp--preset--font-family--overpass) !important;}.has-pt-serif-font-family{font-family: var(--wp--preset--font-family--pt-serif) !important;}.has-petrona-font-family{font-family: var(--wp--preset--font-family--petrona) !important;}.has-piazzolla-font-family{font-family: var(--wp--preset--font-family--piazzolla) !important;}.has-playfair-display-font-family{font-family: var(--wp--preset--font-family--playfair-display) !important;}.has-plus-jakarta-sans-font-family{font-family: var(--wp--preset--font-family--plus-jakarta-sans) !important;}.has-poppins-font-family{font-family: var(--wp--preset--font-family--poppins) !important;}.has-raleway-font-family{font-family: var(--wp--preset--font-family--raleway) !important;}.has-roboto-font-family{font-family: var(--wp--preset--font-family--roboto) !important;}.has-roboto-slab-font-family{font-family: var(--wp--preset--font-family--roboto-slab) !important;}.has-rubik-font-family{font-family: var(--wp--preset--font-family--rubik) !important;}.has-rufina-font-family{font-family: var(--wp--preset--font-family--rufina) !important;}.has-sora-font-family{font-family: var(--wp--preset--font-family--sora) !important;}.has-source-sans-3-font-family{font-family: var(--wp--preset--font-family--source-sans-3) !important;}.has-source-serif-4-font-family{font-family: var(--wp--preset--font-family--source-serif-4) !important;}.has-space-mono-font-family{font-family: var(--wp--preset--font-family--space-mono) !important;}.has-syne-font-family{font-family: var(--wp--preset--font-family--syne) !important;}.has-texturina-font-family{font-family: var(--wp--preset--font-family--texturina) !important;}.has-urbanist-font-family{font-family: var(--wp--preset--font-family--urbanist) !important;}.has-work-sans-font-family{font-family: var(--wp--preset--font-family--work-sans) !important;}.has-light-text-shadow{text-shadow: var(--wp--preset--text-shadow--light) !important;}.has-strong-text-shadow{text-shadow: var(--wp--preset--text-shadow--strong) !important;}
223/*# sourceURL=global-styles-inline-css */
224</style>
225
226<link crossorigin='anonymous' rel='stylesheet' id='all-css-14-1' href='/_static/??-eJx9i0EOgzAMwD60LkKgjR0Qb2mrrOuUJhVJhfb7wQ0u3GzJhrW6KGzIBvbBggq1BWishFh9IAS1H+E9qt7gEJfmKrWUWWHBQJI2TLBVB72aEoojid6y8Encm3xe9nUuU/ccuser74fx+weWSj7U&cssminify=yes' type='text/css' media='all' />
227<link crossorigin='anonymous' rel='stylesheet' id='print-css-15-1' href='/wp-content/mu-plugins/global-print/global-print.css?m=1465851035i&cssminify=yes' type='text/css' media='print' />
228<style id="jetpack-global-styles-frontend-style-inline-css">
229:root { --font-headings: unset; --font-base: unset; --font-headings-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif; --font-base-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;}
230/*# sourceURL=jetpack-global-styles-frontend-style-inline-css */
231</style>
232<link crossorigin='anonymous' rel='stylesheet' id='all-css-18-1' href='/wp-content/themes/h4/global.css?m=1420737423i&cssminify=yes' type='text/css' media='all' />
233<script id="wpcom-actionbar-placeholder-js-extra">
234var actionbardata = {"siteID":"326248","postID":"0","siteURL":"https://otacon22.com","xhrURL":"https://otacon22.com/wp-admin/admin-ajax.php","nonce":"fae394802f","isLoggedIn":"","statusMessage":"","statusSubscribed":"","subsEmailDefault":"instantly","proxyScriptUrl":"https://s0.wp.com/wp-content/js/wpcom-proxy-request.js?m=1513050504i&amp;ver=20211021","i18n":{"followedText":"I nuovi articoli del sito saranno visibili sul tuo \u003Ca href=\"https://wordpress.com/reader\"\u003EReader\u003C/a\u003E","foldBar":"Riduci la barra","unfoldBar":"Espandi la barra","shortLinkCopied":"Copiato negli appunti."}};
235//# sourceURL=wpcom-actionbar-placeholder-js-extra
236</script>
vendor: 1 bytes, line 236
236
237<script id="jetpack-mu-wpcom-settings-js-before">
238var JETPACK_MU_WPCOM_SETTINGS = {"assetsUrl":"https://s1.wp.com/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/"};
239//# sourceURL=jetpack-mu-wpcom-settings-js-before
240</script>
vendor: 1 bytes, line 240
240
241<script crossorigin='anonymous' type='text/javascript'  src='/_static/??/wp-content/js/rlt-proxy.js,/wp-content/blog-plugins/wordads-classes/js/cmp/v2/cmp-non-gdpr.js?m=1780567333j'></script>
vendor: 1 bytes, line 241
241
242<script id="rlt-proxy-js-after">
243	rltInitialize( {"token":null,"iframeOrigins":["https:\/\/widgets.wp.com"]} );
244//# sourceURL=rlt-proxy-js-after
245</script>
245
246<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://otacon22.wordpress.com/xmlrpc.php?rsd" />
247<meta name="generator" content="WordPress.com" />
248<link rel='shortlink' href='https://wp.me/1mS4' />
249
250<!-- Jetpack Open Graph Tags -->
251<meta property="og:type" content="website" />
252<meta property="og:title" content="Otacon22 blog" />
253<meta property="og:url" content="https://otacon22.com/" />
254<meta property="og:site_name" content="Otacon22 blog" />
255<meta property="og:image" content="https://s0.wp.com/i/blank.jpg?m=1383295312i" />
256<meta property="og:image:width" content="200" />
257<meta property="og:image:height" content="200" />
258<meta property="og:image:alt" content="" />
259<meta property="og:locale" content="it_IT" />
260
261<!-- End Jetpack Open Graph Tags -->
262<link rel="shortcut icon" type="image/x-icon" href="https://s1.wp.com/i/favicon.ico?m=1713425267i" sizes="16x16 24x24 32x32 48x48" />
263<link rel="icon" type="image/x-icon" href="https://s1.wp.com/i/favicon.ico?m=1713425267i" sizes="16x16 24x24 32x32 48x48" />
264<link rel="apple-touch-icon" href="https://s2.wp.com/i/webclip.png?m=1713868326i" />
265<link rel='openid.server' href='https://otacon22.com/?openidserver=1' />
266<link rel='openid.delegate' href='https://otacon22.com/' />
267<link rel="search" type="application/opensearchdescription+xml" href="https://otacon22.com/osd.xml" title="Otacon22 blog" />
268<link rel="search" type="application/opensearchdescription+xml" href="https://s1.wp.com/opensearch.xml" title="WordPress.com" />
269		<style id="wpcom-hotfix-masterbar-style">
270			@media screen and (min-width: 783px) {
271				#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
272					margin-top: 5px;
273				}
274			}
275		</style>
276		
276<script>
277var wa_client = {}; wa_client.cmd = []; wa_client.config = { 'blog_id': 326248, 'blog_language': 'it', 'is_wordads': false, 'hosting_type': 0, 'afp_account_id': null, 'afp_host_id': 5038568878849053, 'theme': 'pub/unsleepable', '_': { 'title': 'Pubblicità', 'privacy_settings': 'Impostazioni sulla privacy' }, 'formats': [ 'belowpost', 'bottom_sticky', 'sidebar_sticky_right', 'sidebar', 'gutenberg_rectangle', 'gutenberg_leaderboard', 'gutenberg_mobile_leaderboard', 'gutenberg_skyscraper' ] };
278</script>
278
279		
279<script type="text/javascript">
280
281			window.doNotSellCallback = function() {
282
283				var linkElements = [
284					'a[href="https://wordpress.com/?ref=footer_blog"]',
285					'a[href="https://wordpress.com/?ref=footer_website"]',
286					'a[href="https://wordpress.com/?ref=vertical_footer"]',
287					'a[href^="https://wordpress.com/?ref=footer_segment_"]',
288				].join(',');
289
290				var dnsLink = document.createElement( 'a' );
291				dnsLink.href = 'https://wordpress.com/it/advertising-program-optout/';
292				dnsLink.classList.add( 'do-not-sell-link' );
293				dnsLink.rel = 'nofollow';
294				dnsLink.style.marginLeft = '0.5em';
295				dnsLink.textContent = 'Non vendere o condividere le mie informazioni personali';
296
297				var creditLinks = document.querySelectorAll( linkElements );
298
299				if ( 0 === creditLinks.length ) {
300					return false;
301				}
302
303				Array.prototype.forEach.call( creditLinks, function( el ) {
304					el.insertAdjacentElement( 'afterend', dnsLink );
305				});
306
307				return true;
308			};
309
310		</script>
310
311		
311<script type="text/javascript">
312	window.google_analytics_uacct = "UA-52447-2";
313</script>
313
314
315<script type="text/javascript">
316	var _gaq = _gaq || [];
317	_gaq.push(['_setAccount', 'UA-52447-2']);
318	_gaq.push(['_gat._anonymizeIp']);
319	_gaq.push(['_setDomainName', 'none']);
320	_gaq.push(['_setAllowLinker', true]);
321	_gaq.push(['_initData']);
322	_gaq.push(['_trackPageview']);
323
324	(function() {
325		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
326		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
327		(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
328	})();
329</script>
329
330
331<link crossorigin='anonymous' rel='stylesheet' id='all-css-0-4' href='/_static/??-eJydjdEKwjAMRX/ImolC3cPYp0iXhdEtTUrTMvx7EdRHER/P4XIu7NmhSiWpkJrL3JYoBivVHHB7MSRVgVsUhIkVNwPbY6ZyRLMD/F5IOjcmAwxFmxF/Rm/xb7BGptktgZnK/Rs9D8Y0nHzfXS/e+/P6AHl7YJA=&cssminify=yes' type='text/css' media='all' />
332
333</head>
334
335<body class="home blog wp-theme-pubunsleepable customizer-styles-applied jetpack-reblog-enabled has-marketing-bar has-marketing-bar-theme-unsleepable">
336
337<div id="page">
338
339	<div id="header">
340		<div class="top">
341			<div id="title">
342				<a href="https://otacon22.com/" title="Back to the front page">Otacon22 blog</a>
343			</div>
344
345			<ul id="menu">
346	<li class="page_item page-item-510"><a href="https://otacon22.com/talks/">My Talks</a></li>
347</ul>
348
349		</div>
350	</div>
351
352	<hr />
353
354<div class="content">
355
356	<div id="primary" class="primary">
357
358		
359
360	
361	
362		
363<div id="post-493" class="item entry post-493 post type-post status-publish format-standard hentry category-informatica tag-delegation tag-dhcpv6 tag-ipv6 tag-ndp tag-online-net tag-ovh tag-slaac">
364	<div class="itemhead">
365		<h3>
366					<a href="https://otacon22.com/2016/02/21/two-hosting-providers-ipv6-setups-compared-ovh-online-net/" rel="bookmark">IPv6 setup in two hosting providers compared: awful (OVH) and awesome&nbsp;(Online.net)</a>
367				</h3>
368		<div class="chronodata">21Feb16</div>
369
370		<!-- The following two sections are for a noteworthy plugin currently in alpha. They'll get cleaned up and integrated better -->
371		
372			
373	</div>
374
375	<div class="itemtext">
376		<h1>Why do I care about IPv6?</h1>
377<p>Let me spend some lines, just to introduce why I care about this topic.<br />
378As many of my friends know, I&#8217;m an <a href="https://en.wikipedia.org/wiki/IPv6">IPv6</a> lover and I like to give <a href="https://otacon22.it/upload/IPv6-pres.pdf">presentations</a> to teach how it works and how to setup it.<br />
379The IPv6 standard was published nearly 20 years ago and until ~10 years ago there were very few sites enabling it, as well as few autonous systems able to route it.<br />
380February<strong> 2011</strong> marked the date when <a href="http://www.iana.org/">IANA</a> (no-profit organization managing the IPv4/IPv6 address space) exhausted its free pool of IPv4 address /8 blocks for assignment to regional registries. This didn&#8217;t changed much the availability of IPv4 for the normal customers, but many regional registries and big corporations started to ask themselves about the future of IPv4 address availability.<br />
381So, the IPv6 deployment drastically increased the next year after the <a href="http://www.worldipv6launch.org/">IPv6 world launch in <strong>2012</strong></a>, when several <a href="http://www.worldipv6launch.org/participants/?q=1">big companies</a> (Facebook, Google, Cisco, &#8230;) deployed and enabled IPv6 for all the customers. Many network operators started to follow the wave and the number of deployments continued to increase, especially when ARIN (the north american Internet registry), <a href="https://www.arin.net/announcements/2015/20150924.html">completely exhausted</a> its free pool of IPv4 addresses assignable to customers.<br />
382Google is <a href="https://www.google.com/intl/en/ipv6/statistics.html">continously measuring</a> the percentage of visitors connecting to google.com via IPv6. Google&#8217;s data shows how the deployment of IPv6 is currently (February <strong>2016</strong>) 10% worldwide, ~23% in the United States alone, and continously increasing exponentially.<br />
383This means that, willing or not, we have to move to IPv6 now. It&#8217;s not a matter of setting up shitty networks just to put the &#8220;IPv6 ready&#8221; logo on your homepage. It&#8217;s a matter of getting it <strong>working</strong>.</p>
384<p>IPv6 is not complicated. It has some similarities to IPv4 on many things, but after all <strong>it&#8217;s a new protocol</strong> with new features and new methods of address assigning, multicast etc&#8230;</p>
385<p>While some hosting providers (<a href="http://online.net/">Online.net</a>) did understand how to setup and operate it flawlessly; others are <strong>really</strong> doing an <strong>awful job</strong> (<a href="http://www.ovh.net">OVH</a>).</p>
386<p>So, let&#8217;s see what&#8217;s wrong with OVH and why Online.net is better.</p>
387<h1>OVH</h1>
388<p>First, let me be very clear: I&#8217;ve been an OVH customer for more than 6 years with dedicated servers, RPS, kimsufi (old one, new one), domains and I&#8217;ve even tested new beta services. I enjoyed many of their services and offers. However they deeply disappointed me for the following pitfalls, expecially considering that they were one of the first hosting providers in 
388Europe to offer IPv6.<br />
389IPv6 on OVH works. The problem is how &#8220;it works&#8221; and the number of limitations that you have (expecially compared to a different hosting provider).</p>
390<h2>Kimsufi</h2>
391<p>It all started when I bought two kimsufi servers on OVH. One was personal (I was hosting a research website: <a href="http://rpki.me/">www.rpki.me</a>), another one was for my university club.</p>
392<h3>/128</h3>
393<p>The first thing that I&#8217;ve noted was the subnet size: all kimsufi servers are sold with a /128 IPv6 prefix.<br />
394OVH is currently announcing on public BGP the following prefix for the european region: 2001:41d0::/32 .The <a href="https://tools.ietf.org/html/rfc6177">latest RFC regarding IPv6 address assignments</a> suggests to assign a /48 prefix to each end-site. Let&#8217;s assume that OVH would assign a /48 for each server. This means that there are 2^(48-32) = 65&#8217;000 subnets available.<br />
395Has OVH more than 65k servers? <a href="https://www.ovh.com/us/news/articles/a1168.datacenters-ovh-essential-infographic">Probably yes</a>. Then they could buy a new /32 prefix and address 65k more servers. A /32 IPv6 prefix is not so expensive and if they have so many servers, money should not be an issue. In fact they have three /32, one for Asia, one for Europe and one for Canada.</p>
396<p>OK, so maybe /48 should be reserved to big customers, while others may use a  /56 instead, which is less than the best RFC suggestion, but still enough to allow each server to split the subnet in multiple /64s (for example for VM networks, VPNs, etc..). In this case they would have 2^(56-32) = 16&#8217;777&#8217;216 subnets /56. Has OVH more than 16M servers? I don&#8217;t think so. So a /56 could be reasonable, maybe even a larger allocation for each one.</p>
397<p>But let&#8217;s say that they completely ignore the possibility for someone to be interested in having mutiple subnets, but of course you may use multiple addresses on your server. Maybe they would choose a /64 assignment for each site in order to change the address assignment method in the future to <a href="https://tools.ietf.org/html/rfc4862">SLAAC</a>.<br />
398In case of a /64 assignment, they would have 2^(64-32) = 4&#8217;294&#8217;967&#8217;296 subnets /64. Has OVH more than 4G servers? No. Will they ever have that much? No.</p>
399<p>What did they do? <strong>A /128. A single IPv6 address.</strong> Do you need another address on your server to handle mutiple websites or more services on the same port? They don&#8217;t care. Do you need to setup a VM using IPv6? Why don&#8217;t you choose the idiot idea of doing NAT on IPv6? Why not? (Just kidding, but <a href="https://otacon22.com/2013/01/15/network-address-translation-an-abomination-and-horror/">NAT is bad</a>).</p>
400<p>RFC6177 also specifically says: &#8220;<em>It is no longer recommended that /128s be given out. While there may be some cases where assigning only a single address may be justified, a site, by definition, implies multiple subnets and multiple devices</em>&#8220;. You may argue that a dedicated server is not &#8220;a site&#8221;. However I would consider it a site since the datacenter is not your too and you get addresses as a service from another authority (which doesn&#8217;t know what you want to do with those addresses).</p>
401<p>The only possible idea I have regarding the /128 is this: someone did generate a lot of traffic using a lot of addresses in a /64, and some crappy router that they have crashed or had problems due to fill of <em>NDP cache table.</em> So they thought it was a good idea to proceed in OVH-style to solve the problem. This problem could have been solved instead, by buying decent networking gear, setting limits on caches or <strong>delegating the subnet </strong>instead of generating NDP neighbor solicitation requests (as we will see later).</p>
402<p>Hopefully, <strong>it is a lie</strong>. For some reason all kimsufi servers are setupped with a /128 IPv6 address, <a href="http://www.lowendtalk.com/discussion/27455/yes-you-can-use-the-whole-64-of-ipv6-on-ovh-s-kimsufi">but you can use the whole /64</a> of the provided address just by changing the prefix length on your interface. It&#8217;s easy to understand that it&#8217;s a lie because they assign the IPv6 address ending with <strong>::1 </strong>to each customer. So how could they use the same /64 for two customers, if both of them need that specific address of the subnet?</p>
403<p>Why did they lie? I don&#8217;t know. Probably to let kimsufi customers know that they don&#8217;t deserve a decent service and that those servers are only for &#8220;testing purposes&#8221;,  as they like to underline.</p>
404<h3>Static addresses and stange routers</h3>
405<p>While on IPv4 you are stuck with static addresses or DHCP, in IPv6 you have more choice. You could use static, DHCPv6 for addresses and router advertisements for routes, SLAAC, both DHCPv6 and SLAAC or force one of the two, or you could use DHCPv6 PD (prefix delegation).<br />
406What did OVH choose? Everything static. It&#8217;s a server, could make sense. It&#8217;s annoying because you have to search for your own address on the manager, but you have to do only once.<br />
407OK, but given that I know my address, which is the address of the router?<br />
408A <a href="https://web.archive.org/web/20160220195207/http://help.ovh.com/Ipv4Ipv6">guide on the OVH website</a> illustrate how to assign the address and the default route. Let&#8217;s ignore the fact that all the commands are based on the <a href="https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/">
408deprecated ifconfig</a> <a href="http://inai.de/2008/02/19">tool</a>. In order to setup a default route, you have to create a static route to a specific address (of the router) and then route all the traffic through that.<br />
409The router address is computed by picking your own /64, computing the /56 (even though the &#8220;/56&#8221; concept is not even discussed in the guide) containing it and adding ff:ff:ff:ff:ff, <strong>or more properly writing, by adding ff:00ff:00ff:00ff:00ff to the /56 prefix</strong>.<br />
410The example on the page is misleading because it&#8217;s considering a particular case (where the host&#8217;s address have the 4th group with a leading zero).<br />
411Moreover the page is even more misleading by saying &#8220;5x FF&#8221;, which is not correct, otherwise the address would be &#8230;.:ffff:ffff:ff00:0000.</p>
412<p>My understanding is that each server has its own /64, there is a /56 containing some of these /64s and there is a single IPv6 router per /56 subnet. The router is located in the last /64 of the /56. Each host is able to reach the router directly on layer 2.</p>
413<p>Why not using the address &#8220;all-zeros&#8221; or ending in &#8220;::1&#8221; of the last /64 for the router?<br />
414If the router is in the same layer 2, answering to neighbor solicitations, why not use a link-local address such as fe80::?</p>
415<p>As a side note, OVH completely <strong>forgot to mention IPv6-reachable DNS servers</strong> to use.</p>
416<h3>Security? Isn&#8217;t that only for v4?</h3>
417<p>A friend of mine wrote me &#8220;<em>you told me that the /128 is a /64, but I&#8217;m actually able to use the whole /56 !</em>&#8220;. My friend was partially correct. You don&#8217;t have the whole /56, but nobody will stop you from stealing it. All servers of the same /56 seem to be in the same layer 2 network, and there is no protection in place preventing you to assign any address in the /56. The router will send a neighbor request for that address and you can reply to that. This is not an IPv6 security issue. This is a shitty setup issue.<br />
418I&#8217;m not sure if the same problem is present on IPv4 for the same network.</p>
419<h3>NDP vs. delegating the prefix</h3>
420<p>One of the main issues with the OVH IPv6 setup is that they do not delegate the IPv6 prefix. I will later show how this is valid also for servers other than the kimsufi.</p>
421<p>When you send an IPv6 packet from the Internet to one of the IPv6 addresses of your server, the router responsable of forwarding the packet to your server will generate a neighbor solicitation request (part of the NDP protocol), asking which is the MAC address associated to the given destination address of the packet. Your server will receive the solicitation and reply with a neighbor advertisement.</p>
422<p>This approach might be fine for an access network, but it&#8217;s not good for a server. A server might receive traffic on a lot of addresses, and this process will not scale and could eventually give problems to the NDP cache of the router (expecially if not properly implemented).<br />
423Let&#8217;s say your server has 2001:41d0:8:17d8::1/64 and you want to run several virtual machines inside the server using IPv6. There are only two ways for doing this: bridging the server&#8217;s network interface with the VM one (probably a bad idea), or route the traffic for a slice of the subnet to the vm (better idea).<br />
424So you split a slice of your subnet, in order to use it only for the VMs. You add a static route pointing 2001:41d0:8:17d8:1000:/65 to the hypervisor interface.<br />
425However, when a packet destinated to the VM arrives from the Internet through the OVH router, the router will send a neighbor solicitation in order to find who has the address. No one will reply, since the VM is routed behind the server and do not receive neighbor solicitations.</p>
426<p>The dirty workaround is to use the <a href="http://www.geeklab.info/2013/05/ipv6-neighbour-proxy/">NDP proxy function</a> of the Linux kernel, in order to allow the server to reply <span id="result_box" class="short_text" lang="en"><span class="hps">on behalf of</span></span> the VM.<br />
427The Linux kernel allows us to proxy only single addresses. So if we want to reply to neighbor solicitation for the whole /65 we have to compile and configure a <a href="https://github.com/DanielAdolfsson/ndppd">NDP proxy daemon</a> program, just to reply to these useless requests.</p>
428<p>If we want to setup a VPN providing IPv4 and IPv6 connectivity, using the address space of the server, we will run in the exact same problem.</p>
429<p>The solution to this problem, and also the previously mentioned security problem, is to get the server&#8217;s prefix <strong>delegated</strong> by the router. This is possible through DHCPv6 PD or more simply by creating a static route on the router in the datacenter, routing all the traffic for the /64 prefix to the server&#8217;s link-local address for example. Setupping the static route with an automatic script is matter of minutes to setup. This would also solve the problem of filling the NDP cache which probably conviced OVH to use /128s.</p>
430<h3>Reverse DNS delegation</h3>
431<p>This could be useful for a number of things, such as email servers which need the correct reverse DNS on the address they listen to.</p>
432<p>From the kimsufi administration web interface it&#8217;s possible to configure a reverse DNS for each IPv4 address. It is also possible to configure a reverse DNS, but only for a single IPv6 address, not the whole subnet. OK. The server is sold as a /128, so it could make sense, but we will see later that this does not change much also for a server sold with a /64.</p>
433<h2>Kimsufi broken IPv6 connectivity</h2>
434<p>As I said, I had more than one kimsufi, purchased in different time frames. Sadly the second one came with IPv6 connectivity broken.</p>
435<p>A friend told me &#8220;<em>yes, probably it&#8217;s broken, but nobody will notice except you</em>&#8220;.<br />
436Wrong: as soon as I&#8217;ve booted the fresh-installed system pre-configured by OVH, and I run <em>apt-get update</em> , the command started and immediately halted waiting for connection to repositories. APT by default is trying over IPv6, which was broken, so I was not even able to install anything, unless forcing the use of IPv4.</p>
437<h3>The problem</h3>
438<p>After some troubleshooting I&#8217;ve quickly found out that the IPv6 gateway (&#8230;ff:ff:ff:ff:ff) was not replying to neighbor solicitations. I beleve this was very likely to be a VRRP/HSRP or loopback address configuration error on their router.</p>
439<h3>The ticket</h3>
440<p>I did the &#8220;standard&#8221; process. On the kimsufi you can&#8217;t open a proper ticket, but you can send a message to the technical assistence. So I did, and I&#8217;ve been waiting for <strong>5 days</strong>. No reply.<br />
441I&#8217;ve sent again.<br />
442After <strong>6 days</strong> they reply &#8220;Please include the complete IP configuration in your reply. Once we can rule out any configuration errors I can then forward this on to our technicians and have them correct the issue.&#8221;</p>
443<p>I thought it was clear enough already. Anyway I copy the output of all the commands clearly showing where the problem is.</p>
444<p>In the meantime there is a <a href="https://web.archive.org/web/20160220175220/https://forum.kimsufi.com/showthread.php?33805-IPv6-issue-in-RBX/">thread on the kimsufi forum</a>, with several people reporting the exact same issue. Many people wrote to the support and got no reply.</p>
445<p>After <strong>12 days</strong> they reply &#8220;The IPv4 configuration is incorrect. Your IP is isolated /32 shoud should be [&#823
4450;]&#8221;. My problem was on IPv6, what are they talking about? I double check what they wrote and then I reply immediately saying that they didn&#8217;t understood the problem, and I also link the thread on the forum.</p>
446<p>After few hours they reply &#8220;I can ask a technician to have a look into this but first I need to confirm you have a full backup of your data and can authorise an intervention before we proceed?&#8221;. I agree and wait.</p>
447<p>2 days later: &#8220;Please configure the IP as described in the following link. It will then work fine. <a href="http://help.ovh.co.uk/Ipv4Ipv6">http://help.ovh.co.uk/Ipv4Ipv6</a> &#8220;. Of course they didn&#8217;t solve anything and following the guide was useless. I decide to ignore the problem and I setup an IPv6 tunnel with <a href="http://he.net/">hurricane electric</a> (perfectly working with a /48, but slower because tunneled far away).</p>
448<p>So: IPv6 broken for more than 1 month and I gave up on trying again.</p>
449<h3>OVH-style solution</h3>
450<p>In the meantime, the number of people experiencing the same problem with IPv6 was increasing. Probably someone at OVH noticed the problem and decided to apply an OVH-style solution: filter all AAAA DNS records in the DNS replies sent out from OVH&#8217;s DNS server. In this way everyone can buy the server, boot and run <em>apt-get update </em>without noticing IPv6 being completely broken.</p>
451<blockquote><p># host -t AAAA google.com<br />
452google.com has no AAAA record</p>
453<p># host -t AAAA google.com 8.8.8.8<br />
454Using domain server:<br />
455Name: 8.8.8.8<br />
456Address: 8.8.8.8#53<br />
457Aliases:<br />
458google.com has IPv6 address 2a00:1450:4007:807::1001</p></blockquote>
459<p>I have no words.</p>
460<h2>SoYouStart</h2>
461<p>Now you may think: &#8220;OK. But you are speaking about Kimsufi servers. Those are test servers completely unreliabile, tought for tests, not real stuff&#8221;.<br />
462Sadly I&#8217;ve had to manage also a SoYouStart <a class="product-name" href="https://www.soyoustart.com/it/offerte/e3-sat-1.xml">E3-SAT-1</a> , which is a production-grade server with SLA and assistance.</p>
463<h3>So a /48 finally?</h3>
464<p>No. The SoYouStart IPv6 setup is basically identical to the kimsufi&#8217;s one, except for the fact that they officially provide a /64. Yes: you are paying 30€/month of rent and you only get a single /64.</p>
465<h3>SLAAC? What is that? Ah yes, but it&#8217;s broken</h3>
466<p>When I was setting up the server I did the partitioning and distro install by myself in order to tune a couple of things, so the IPv6 setup was not there ready.</p>
467<p>After booting the server, I&#8217;ve noticed that as soon as the network interface came up, I had a default route in the IPv6 routing table. Good! So they enabled SLAAC? No, because I got only the route, not the automatically assigned address. Anyway I got a route advertisment from the router, so I just have to assign the IPv6 address and I&#8217;m ready.</p>
468<p>Everything works great. For about 30 minutes. After 30 minutes I don&#8217;t have a default route anymore. I bring down and up the interface, and now I have again the default route.<br />
469I notice however that, the default route learned through neighbor advertisments, has an expire time: it can only be used for 30 min. In that period of time the route <a href="https://tools.ietf.org/html/rfc4861">should be reannounced periodically by the router</a>. However, for some reason, OVH&#8217;s routers are not sending router advertisements periodically. They reply only when a router solicitation is sent.<br />
470However this is not DHCPv4. This is IPv6: the host, complying the standard, <a href="https://tools.ietf.org/html/rfc4861#section-6.3.7">will only send a router solicitation when it brings up the interface</a>. This should be enough since router advertisements are send periodically.</p>
471<p>So after all you <strong>can&#8217;t use router advertisements , because they are broken in OVH.</strong></p>
472<p>So I disabled accepting router advertisments via sysctl and configured the static address as explained in the old guide.</p>
473<p>The question here is: why on earth sending broken router advertisements if you don&#8217;t support them? Just disable them completely, otherwise people without the correct sysctl might get IPv6 broken by OVH routers.</p>
474<h3>Security</h3>
475<p>Security didn&#8217;
475t change from the Kimsufi. You can still use addresses of other people&#8217;s /64s.</p>
476<h3>NDP vs. Prefix delegation</h3>
477<p>Does OVH delegate the /64 IPv6 prefix instead of using NDP, on the soyoustart? No. Same as kimsufi.</p>
478<h3>Reverse DNS delegation</h3>
479<p>Do they allow you to delegate the reverse DNS zone of your /64? No. If you want you can add each address to the web interface, or using APIs, but they don&#8217;t delegate.</p>
480<p>&nbsp;</p>
481<h1>Online.net</h1>
482<p>I recently purchased a couple of servers from Online.net and I&#8217;ve experienced a much better setup instead:</p>
483<h3>Addressing and prefix delegation</h3>
484<p>Each user holding an online.net account can request a /48 IPv6 prefix. This is possible for all users, both if you take a 30€/month server or if you take a 5€/month one. This prefix can be splitted from the manager into several /56. Each /56 that you slice from the /48 , is associated with a special unique <em>DUID</em>.</p>
485<p>The server receive the default route normally via router advertisements, then sends a DHCPv6 request containing the DUID of the chosen subnet to be used. Online.net DHCPv6 server will lookup which is the subnet associated to the DUID and will reply <strong>delegating </strong>the entire prefix to the host (as discussed before). So it&#8217;s possible to setup VPNs, VMs and other things without having to deal with NDP proxying.</p>
486<p>The DHCPv6 daemon is continously running to renew the delegation of the prefix, and router advertisements are continously coming to the routing table.</p>
487<p>Online.net also have <a href="https://documentation.online.net/en/serveur-dedie/reseau/ipv6-prefix">good documentation</a> explaining how to setup the DHCPv6 client correctly.</p>
488<h3>Reverse DNS delegation</h3>
489<p>In the manager interface is possible to specify two addresses of DNS servers authoritative for the reverse DNS of the /48.</p>
490<h3>Security</h3>
491<p>As far I can tell, because of the absence of neighbor solicitations, it&#8217;s not possible to steal addresses of other servers, nor I can see any &#8220;public&#8221; NDP traffic on the network interface.</p>
492<p>&nbsp;</p>
493<p>&nbsp;</p>
494<p>&nbsp;</p>
495
496			</div>
497	<br class="clear" />
498	<small class="metadata">
499		<span class="category">Filed under: <a href="https://otacon22.com/category/informatica/" rel="category tag">informatica</a>	</span>
500		&nbsp;&nbsp;|&nbsp;&nbsp;<a href="https://otacon22.com/2016/02/21/two-hosting-providers-ipv6-setups-compared-ovh-online-net/#comments" class="commentslink" >4&nbsp;<span>Comments</span></a>		<br />Tag:<a href="https://otacon22.com/tag/delegation/" rel="tag">delegation</a>, <a href="https://otacon22.com/tag/dhcpv6/" rel="tag">dhcpv6</a>, <a href="https://otacon22.com/tag/ipv6/" rel="tag">ipv6</a>, <a href="https://otacon22.com/tag/ndp/" rel="tag">ndp</a>, <a href="https://otacon22.com/tag/online-net/" rel="tag">online.net</a>, <a href="https://otacon22.com/tag/ovh/" rel="tag">ovh</a>, <a href="https://otacon22.com/tag/slaac/" rel="tag">slaac</a><br />	</small>
501</div><!-- #post-493 -->
502
503		
504<div id="post-408" class="item entry post-408 post type-post status-publish format-standard hentry category-diario category-informatica tag-disgust tag-horror tag-internat tag-ipv4 tag-napt tag-nat tag-network-address-translation tag-security">
505	<div class="itemhead">
506		<h3>
507					<a href="https://otacon22.com/2013/01/15/network-address-translation-an-abomination-and-horror/" rel="bookmark">Network Address Translation: an abomination and&nbsp;horror</a>
508				</h3>
509		<div class="chronodata">15Gen13</div>
510
511		<!-- The following two sections are for a noteworthy plugin currently in alpha. They'll get cleaned up and integrated better -->
512		
513			
514	</div>
515
516	<div class="itemtext">
517		<p>IPv4 addresses are not so many. When Internet started a long time ago, 2³² addresses (more than 4 billion) seemed to be a lot. Today the IANA (the organization which administrate addresses and &#8220;numbers&#8221; of the Internet) have already completed the assignment of all IPv4 address blocks to all &#8220;regional&#8221; authorities of several parts of the planet.<br />
518For this and other reasons we are now inside a migration process to the new IPv6 protocol, which provide 128-bit addresses. A lot of estimations shown that this new kind of addresses will be enough for a lot of time, even we will use them in a very &#8220;bad way&#8221;.<br />
519The migration process already started officially in 2008 and will go ahead for several years. We are already using a lot of migration techniques on several networks (which provide both IPv4 and IPv6 connectivity). Since June 2011, Facebook, Google and several &#8220;bigs&#8221; of the Internet, started offering IPv6 services to all customers around the world. As today, the &#8220;T-Mobile&#8221; mobile operator in the  US is providing IPv6 connectivity to every mobile phone customer.</p>
520<p>Actually this lack of IPv4 addresses was already predicted and known during the 90&#8242;, when the <strong>NAT (Network Address Translation)</strong> was created on purpose of &#8220;temporarily&#8221; solve the problem. This &#8220;temporarily&#8221; has been very long, because we still use it today and more than ever.</p>
521<p>But, first of all, let me clarify some definitions. Plain &#8220;NAT&#8221; means the translation of public IPv4 prefix, into a &#8220;private&#8221; IPv4 prefix and vice-versa (where &#8220;private&#8221; = prefix part of the private blocks specified in <a href="https://tools.ietf.org/html/rfc1918">RFC1918</a>). This means that we do a one-to-one association between public and private addresses. For each public address we associate a private address.<br />
522For example, let&#8217;s suppose that we have a router with two interfaces, one to the Internet and one to a local LAN network which uses private IPv4 addresses.<br />
523Let&#8217;s also suppose we have 10 computers on the LAN and 10 public IP address available for Internet use. The plain NAT means that we could use 10 private addresses on the computers on the LAN and program the router in a way that, for each incoming IPv4 packet it will change the destination IP address with a private address and vice-versa, based on a association table. This permits to easily change public IP addresses of all machines (for example when we change ISP provider).</p>
524<p>But this &#8220;plain NAT&#8221; is quite never used today. What I want to talk about is the <strong>NAPT (Network Address and Port </strong> <strong>Translation) </strong>, which is often called just &#8220;NAT&#8221;, giving origin to this ambiguity.</p>
525<p>The NAPT works in this way: let&#8217;s suppose we have again a local network and a router as before, but we just have one public IPv4 address and 10 computers on the local network. How can we connect all c
525omputers to the Internet? So first let&#8217;s do a step back and let&#8217;s see in a very easy way how a connection works.<br />
526Every computer wants to send/receive TCP and UDP packets. Each TCP or UDP packets, can be identified by two &#8220;port&#8221; numbers, a source port and a destination port. The source port is an identifier to understand from which application of the host from which the packet came, while the destination port is an identifier of the application to connect on the destination host. The destination host will swap destination and source port numbers in order to send back responses.</p>
527<p>So, we will use private IP addresses as before on the local network and we will keep the public IP address on the router. The router will use the NAPT, so when an initial packet come from the local network, the router will check the <strong>source port</strong> of the TCP packet and it will check the free source port numbers on its public IPv4 address. The router will then choose a free source port for its address and will note in a table: &#8220;the local network host with address x.y.z.w has established a connection to a remote host k.h.j.l and all packets coming from x.y.z.w  with source port X must be rewritten with my source port Y and my public address as source&#8221;. In a similar way it will read on reverse-way the previous route when a packet comes from the Internet. When a packet comes from the Internet, the router will check if the destination address is its public IP, if so it will then check the destination port and see if that port is used for some NAPT mapping. If the port is part of a NAPT mapping rule, it will find the row in the table, change the destination port y with the previously changed port X and the destination address with the private address x.y.z.w of the LAN host. All this could be also be deployed using more than one public address on the router, in order to increase the number of parallel connections (we will see that later).</p>
528<p>Even if this system allows you to &#8220;solve&#8221; the IPv4 exhaustion problem, a lot of network administrators and people in the Internet community think that this is really an abomination and horror for TCP/IP network protocol suite. In the following I will explain to you why I agree with them:</p>
529<h2>10 Reasons for which NAPT (NAT) should not be used:</h2>
530<ol>
531<li>NAPT goes against the most important rule about protocol layering, which says that <span style="text-decoration:underline;">a protocol of level k should not make any assumption about protocols of level k+1</span>. A router should just take IP packets coming and route them using a routing table. Instead, by using NAPT,  the router also has to check the IP packet payload (the TCP/UDP protocol header) in order to check port numbers. This should not be done according to the layering rule and it also cause a not expected overhead on a embedded device which should just forward packets but also starts to trace all TCP/UDP connections going over.</li>
532<li>NAPT is<strong> against the hierarchical model of IP</strong>, which says that any host connected to the Internet is identified globally in unique way by an IP address. In some cases this could be a good thing for our anonymity, but surely it is not a warranty that we could not be traced anyway in several other ways.</li>
533<li><strong>Internet applications should not be forced to use TCP and UDP</strong>. If a user behind a NAT chooses to use a different (layer 4) transport protocol, he will not be able to use it, because NAPT works only on TCP and UDP checking port numbers. On some transport protocol there are no port numbers. ICMP for example, the control protocol for IP workings and network diagnostics, does not use port numbers but it&#8217;s necessary anyway. For this reason NAPT routers employ several <a href="http://tools.ietf.org/html/rfc5508">workarounds</a> in order to send/receive ICMP packets correctly (watching other numbers inside the ICMP packets). This is obviously <strong>other &#8220;hard&#8221; work for the router</strong>. We should not forget that each time that we add something to do on the router side, the workload for each packet increase and some network lines could slowly increase latency and congestions.<br />
534This means that manufacturers will need powerful hardware and so higher costs (and energy consumption). I understand that this is a bit exaggerated view of the problem, but if we have really a lot of traffic (and not just 10 computers),  we should start to consider also these problems.</li>
535<li><strong>
535With NAPT, the router has to re-compute the IP and  TCP/UDP/ICMP checksums</strong>. The IPv4 header contains a checksum of itself. Since we change IP address in the header in order to perform NAPT, we have to recalculate this checksum. TCP also have a checksum, which <a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_checksum_for_IPv4">is calculated using the source and destination address of the IP header</a>. The UDP checksum is not usually enabled, but ICMP also has a checksum. This is not a big problem, but if we have to NAPT a large network we will have a lot of overhead in order to process so many checksum operations at wire-speed, so we will again need more powerful hardware.</li>
536<li><strong>Handling IP fragments</strong> <strong>is hard!</strong> TCP/UDP port numbers are present only in the initial header of the transport-level frame. If a TCP/UDP packet gets fragmented on the path, the NAPT router will need to keep track of fragment numbers. If <strong>two transmitters choose the same Fragment Identifier</strong>, the router might not be able to understand which is the correct translation for the packet (it has two possible translations). It&#8217;s a quite rare case but it is still possible.</li>
537<li><strong>The parallel number of concurrent connections decrease.</strong> This is because the NAPT router should use one of its free source TCP/UDP ports for each connection. Since the available ports are 2^16 (actually the first 4096 should not be used for NAPT), we can&#8217;t have more than 65535 connections for each public IP address used by the NAPT router. You could think that it&#8217;s a big number, but if we use just one IP address for the network of a small company or a university campus (and maybe someone is doing port-scanning or other bad things), the router will exhaust port numbers and the network will not accept new connections. If we have 100 computers behind the NAPT, each one could do only about 655 concurrent connections. Try to open a p2p software on some of them and see what happens.<br />
538So for this reasons, manly on corporate networks, we use more than one public IPv4 address: we use a pool of IPv4 public addresses, in order to have more parallel connections available. So at this point, was it really necessary to use NAPT if we had other public addresses? Maybe for a university campus the answer would be &#8220;yes&#8221;, but for a small office could be &#8220;no&#8221;.</li>
539<li><strong>NAPT transforms the Internet from a connectionless network, to a connection-oriented network. </strong>The NAPT router must keep track of all information related to a connection going over it. So, if a NAPT router goes down and its NAPT mapping table goes away, all TCP/UDP/ICMP connection will not be able to continue when the router comes back online. Instead, without NAPT, when a router goes down and then up, the endpoints using a TCP connection will see just a short lag (router&#8217;s reboot time) in communication. UDP also has problems: let&#8217;s say for example that we are doing a VoIP call when someone reboots the router. VoIP usually works over RTP protocol (which runs over UDP). If we are using a normal router we will just have a short silence in communication, then the audio will come back. Instead, when behind the NAPT, the VoIP call will be lost and we should call back again. I know, it&#8217;s not a so common scenario, but it shows how much NAPT is evil.</li>
540<li>Usually each host connected to the Internet is able to connect to some servers or expose some services on the network, so that other people could connect. Sadly, using the NAPT <strong>we can&#8217;t get incoming connections to our host</strong>. You could say that it is possible to configure the NAPT router to forward some ports. So let&#8217;s say I have two hosts on the LAN who want to expose a HTTP webserver (TCP port 80). We just have 1 public IP address and we can use the TCP port 80 just once. How could we provide access to more than one of the two hosts? We will be forced to use a non-standard port on the other host. I think that (also) because of the NAPT, the Internet is becoming everyday more a &#8220;download-only&#8221; network. This might be a more philosophical problem instead of a technical one, but I think that the good side of the Internet (since its first days of existence) is the possibility for anyone to expose to anyone else a self-hosted service, in any point on the world, without the need to ask to a third-party to do that.</li>
541<li>A lot of application-level protocols (DCC and FTP in active mode for example) use IP addresses of hosts inside application-level messages (to notice the server where to send some data). The NAPT doesn&#8217;t know anything about this and the result is that these protocols don&#8217;t work anymore today. On some routers there are some deep packet inspection systems (<strong>Application Level Gateway</strong>
541) which are able to recognize these application messages and alter them while opening ports in the NAPT mapping, in order to provide some form of  &#8220;retro-compatibility&#8221; (a lot of NAPT routers do that for FTP active mode for example). I think this is even worse of what we were talking before. Now the router doesn&#8217;t just have to check for layer-4 messages, but even layer-7 messages! Rebuilding TCP packets to search for a byte sequence it&#8217;s not a fast/easy thing to do for a router, it adds a lot of overhead. If you aren&#8217;t still convinced about this problem maybe you should read the <a href="http://en.wikipedia.org/wiki/NAT-T">workarounds</a> that <strong>IPsec</strong> creators made for using IPsec over NAPT. IPsec can sign or ecrypt the payload of IP packets in order to make them secure and with reliable source. IPsec, in order to add this feature, sign all the IP payload. This is a problem because some fields which should be fixed (port numbers) are changed by the NAPT and the sign check fail. Also, if the packet is encrypted, the NAPT can&#8217;t read port numbers!</li>
542<li>The NAPT <strong>doesn&#8217;t let you able to keep open idle connections</strong>. Can be sometimes useful to keep an open connection where no data is exchanged for hours or weeks (let&#8217;s think about today&#8217;s popular websockets or IMAP with IDLE command). TCP/IP supports this feature without problems since the connection state is kept just by endpoints. The NAPT has few free port numbers to use, so it can&#8217;t just keep them allocated forever (for connections bad-closed and DoS attacks to the NAPT). For these reasons, the NAPT closes some connections when are not &#8220;active&#8221; and reallocate port numbers for new connections. The worst thing about this is that (on some NAPT implementations), the two hosts involed don&#8217;t receive any notification of this &#8220;disconnection&#8221; by the NAPT, so they still assume to be connected even if they aren&#8217;t, and they will discover that just when trying to send something to the other host.<br />
543On the other hand, without NAPT, we could shutdown the router, change communication lines, change the way we connect to the router, put the host in standby, cut ethernet cables, reconnect and wait. <strong>We could do whatever we want.</strong> When we will be back online, if the addresses of the endpoints have not been changed, we are still &#8220;connected&#8221; to the other host and we are still able to send data on the same connection, thanks to TCP/IP.<br />
544Someone could ask &#8220;so how can I keep open idle connections over NAPT?&#8221;, there are many answers, maybe the most popular is to use something like &#8220;ping/pong&#8221; messages like IRC does sometimes. Another answer could be to use a workaround called &#8220;<a href="http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html">TCP-Keepalive</a>&#8221; which sends some empty TCP packets sometimes inside a TCP connection in order to show to the NAPT that we are active and that it should not delete the mapping rule.</li>
545</ol>
546<h2>The NAT is not a firewall</h2>
547<p>A lot of people think that the NAPT, for how it works, could be used (<strong>improperly</strong>) as a firewall technique. Let&#8217;s imagine, for example, a university campus network. We don&#8217;t want students to turn on SMTP servers in order to start spamming or other stuff like that. How could we prevent this? Some people say &#8220;let&#8217;s turn on a NAPT so they can just connect outside&#8221;. This could work but it is not the purpose of NAPT and I consider it a bad idea, in particular on small networks where we have public addresses for everyone. The purpose of NAPT is not that. It&#8217;s always possible to use a stateful firewall on the router or a separate machine, in order to prevent LAN hosts to expose services to the Internet.</p>
548<p>Some people says that NAPT protects them from network attacks. Really?</p>
549<ul>
550<li>On some NAPT cheap routers it can happen that, for several reasons, the WAN and LAN interface are actually on the same physical card, so if you send a packet to the WAN interface, it will go inside the LAN too.</li>
551<li>Some router have &#8220;modules&#8221; in order to get FTP active mode and DCC protocols working (as we stated before). This is good but it also gives you security issues. By using some special attack techniques it&#8217;s possible for an attacker to use this mechanism in order to open an arbitrary port on the NAPT to an arbitrary host in the local network. For example, by using a special webpage with a java or flash application (see for example <a href="http://www.youtube.com/watch?feature=player_detailpage&amp;v=2ctRfWnisSk#t=252s">here</a>)</li>
552<li>Some local networks implement the UPnP protocol on the main router (using the so called &#8220;IGD&#8221; service). By using the IGD service, an host on the local network could ask to the router to add a port-mapping rule in order to get incoming connections from outside. It turns out that some routers accept this kind of requests also from the WAN interface (see this <a href="http://www.upn
552p-hacks.org/sane2006-paper.pdf">paper</a>)</li>
553</ul>
554<h2>Other bad things</h2>
555<p>Did you know? Some ISP providers started to give you private addresses instead of public ones. This is called Carrier-Grade NAT and it&#8217;s still bad because it again breaks the end-to-end connectivity and you also don&#8217;t have any control to open up a port, since the NAT is performed on the carrier&#8217;s network.</p>
556<div id="atatags-370373-6ac1efa1efbde">
557		
557<script type="text/javascript">
558			__ATA = window.__ATA || {};
559			__ATA.cmd = window.__ATA.cmd || [];
560			__ATA.cmd.push(function() {
561				__ATA.initVideoSlot('atatags-370373-6ac1efa1efbde', {
562					sectionId: '370373',
563					format: 'inread'
564				});
565			});
566		</script>
566
567	</div>
568			</div>
569	<br class="clear" />
570	<small class="metadata">
571		<span class="category">Filed under: <a href="https://otacon22.com/category/diario/" rel="category tag">diario</a>, <a href="https://otacon22.com/category/informatica/" rel="category tag">informatica</a>	</span>
572		&nbsp;&nbsp;|&nbsp;&nbsp;<a href="https://otacon22.com/2013/01/15/network-address-translation-an-abomination-and-horror/#respond" class="commentslink" >Leave a <span>Comment</span></a>		<br />Tag:<a href="https://otacon22.com/tag/disgust/" rel="tag">disgust</a>, <a href="https://otacon22.com/tag/horror/" rel="tag">horror</a>, <a href="https://otacon22.com/tag/internat/" rel="tag">internat</a>, <a href="https://otacon22.com/tag/ipv4/" rel="tag">ipv4</a>, <a href="https://otacon22.com/tag/napt/" rel="tag">napt</a>, <a href="https://otacon22.com/tag/nat/" rel="tag">nat</a>, <a href="https://otacon22.com/tag/network-address-translation/" rel="tag">network address translation</a>, <a href="https://otacon22.com/tag/security/" rel="tag">security</a><br />	</small>
573</div><!-- #post-408 -->
574
575		
576<div id="post-390" class="item entry post-390 post type-post status-publish format-standard hentry category-diario category-hgcomo category-informatica tag-catturare tag-iptables tag-linux tag-lxc tag-mount tag-namespace tag-pcap tag-processo tag-traffico tag-util-vserver tag-vspace">
577	<div class="itemhead">
578		<h3>
579					<a href="https://otacon22.com/2012/10/31/linux-catturare-il-traffico-di-rete-di-un-singolo-processo-usando-i-namespace-di-rete/" rel="bookmark">[Linux] Catturare il traffico di rete di un singolo processo usando i namespace di&nbsp;rete</a>
580				</h3>
581		<div class="chronodata">31Ott12</div>
582
583		<!-- The following two sections are for a noteworthy plugin currently in alpha. They'll get cleaned up and integrated better -->
584		
585			
586	</div>
587
588	<div class="itemtext">
589		<p>L&#8217;altro giorno dovevo controllare il traffico generato da un programma (Skype). La mia macchina ovviamente sputa fuori un sacco di dati in rete (firefox aperto con diverse tab con connessioni http, client di chat, lettori di feed).</p>
590<p>L&#8217;approccio classico per questo tipo di cose è: apro tcpdump/wireshark, penso un po&#8217; alle porte tcp/udp e indirizzi che mi aspetto grossomodo di vedere uscire dal programma e filtro su quello. Oppure avvio tutto senza filtri e spero nella valanga di roba che esce di beccare quello che mi interessa (tanti auguri quando avete molto traffico&#8230;). Oppure se proprio voglio sprecare risorse avvio una macchina virtuale (solo per questo? really?).</p>
591<p>Un altro approccio è lanciare il programma interessato con un GID (creato appositamente per l&#8217;applicazione) diverso da quello normale e poi, utilizzando il modulo owner  (<code>-m owner --gid</code>) di iptables, identificare tutti i pacchetti di quel gruppo e <a href="http://www.stearns.org/doc/iptables-ulog.v0.1.html">con il target ULOG tirarci fuori un file pcap</a>.</p>
592<p>Sinceramente però avevo poca voglia di fare così e ho appena imparato ad usare i <strong>namespace di rete su Linux</strong> (thanks Max!), quindi ho provato un altro modo un po&#8217; come &#8220;<strong>esercizio di stile</strong>&#8221; (cit.). Non prendetela troppo come una roba per final users, ma semmai per <strong>p0w3r u5erZ</strong>.</p>
593<p>Su Linux sono stati introdotti, ormai da un po&#8217;, <a href="http://lxc.sourceforge.net/index.php/about/kernel-namespaces/">diversi namespace</a>. In particolare per quanto riguarda la rete, abbiamo la possibilità di avviare un processo in un namespace di rete diverso da quello di default. In questo modo il processo non vedrà nessuna interfaccia, nessuna regola di routing, nessun indirizzo ip, nessuna regola di iptables. In pratica è come se, esclusivamente dal punto di vista della rete, il processo si trova in un sistema &#8220;nuovo&#8221;. Tra l&#8217;altro questo fatto coinvolge anche tutti i processi figli. Poi volendo ci sono anche i namespace PID, UID, mount, &#8230;, insomma usandoli tutti possiamo fare più o meno una macchina virtuale &#8220;leggera&#8221;, che gira sempre sopra lo stesso kernel.</p>
594<p>Detto questo bisogna sapere che è anche possibile <a href="http://lxc.sourceforge.net/index.php/about/kernel-namespaces/network/">creare delle interfacce di rete</a> &#8220;tunnel&#8221; tra un namespace di rete e l&#8217;
594altro.</p>
595<p>Utilizzeremo un tool per &#8220;maneggiare&#8221; i namespace nel kernel Linux (basta avere una versione del kernel &gt;=2.6.26). Il tool è &#8220;unshare&#8221; e dovreste trovarlo già installato all&#8217;interno della vostra distribuzione. Fa solitamente parte del pacchetto <strong>util-linux</strong><strong></strong>. Un tool molto simile (alternativo) che ha qualche funzionalità in più è &#8220;<strong>vspace</strong>&#8221; del pacchetto &#8220;<strong>util-vserver</strong>&#8221; (che però dovete installare quasi sicuramente a parte).</p>
596<p>A questo punto possiamo aprire un processo bash all&#8217;interno di un nuovo namespace:<br />
597<code>$ sudo unshare --net /bin/bash</code><br />
598sudo è necessario perché viene fatta una syscall (per la precisione la clone con flags=CLONE_VFORK|CLONE_NEWNET|SIGCHLD ) che richiede privilegi di superutente.</p>
599<p>Ok, ora nella bash che abbiamo lanciato noteremo l&#8217; assenza di interfaccie di rete (eccetto il loopback, che comunque mancherà di indirizzo ip):</p>
600<p><code>$ ip link show<br />
6015: lo:  mtu 16436 qdisc noop state DOWN<br />
602    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br />
603</code></p>
604<p>Di regole di routing:</p>
605<p><code>$ ip route show<br />
606$ </code></p>
607<p>E di regole di iptables</p>
608<p><code>$ iptables -nvL<br />
609Chain INPUT (policy ACCEPT 0 packets, 0 bytes)<br />
610 pkts bytes target     prot opt in     out     source               destination         </p>
611<p>Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)<br />
612 pkts bytes target     prot opt in     out     source               destination         </p>
613<p>Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)<br />
614 pkts bytes target     prot opt in     out     source               destination<br />
615</code></p>
616<p><code><br />
617$ ip6tables -nvL<br />
618Chain INPUT (policy ACCEPT 0 packets, 0 bytes)<br />
619 pkts bytes target     prot opt in     out     source               destination         </p>
620<p>Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)<br />
621 pkts bytes target     prot opt in     out     source               destination         </p>
622<p>Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)<br />
623 pkts bytes target     prot opt in     out     source               destination<br />
624</code></p>
625<p>Possiamo per prima cosa assegnare un indirizzo (IPv4 e IPv6) all&#8217;interfaccia di loopback, che potrebbe servire per IPC tra processi:</p>
626<p><code>$ ip addr add 127.0.0.1/8 dev lo</code><br />
627<code>$ ip addr add ::1/128 dev lo</code><br />
628<code>$ ip link set dev lo up</code></p>
629<p>Adesso ci serve tirare su una comunicazione verso l&#8217;esterno, quindi utilizzeremo due interfacce di rete virtuali, che faranno da &#8220;ponte&#8221; tra il namespace che abbiamo creato e quello &#8220;globale&#8221; (quello &#8220;solito&#8221; insomma).</p>
630<p>Quindi da un altro terminale fuori dal namespace che abbiamo creato, facciamo un:<br />
631<code>$ sudo ip link add name antani0 type veth peer name antani1</code><br />
632Questo ci creerà nel namespace &#8220;globale&#8221; due interfacce: antani0 e antani1, &#8220;finte&#8221; ethernet, collegate tra di loro in un unico dominio di collisione. Ora abbiamo la possibilità di spostare una delle interfacce che abbiamo creato, all&#8217;interno del nuovo namespace.<br />
633Per identificare il namespace di rete che abbiamo creato, possiamo cercare nella lista dei processi il PID del nostro bash &#8220;speciale&#8221; e segnarcelo. A questo punto facendo:<br />
634<code>$ sudo ip link set dev antani1 netns /proc/$PID_BASH/ns/net</code><br />
635Diremo di spostare l&#8217;interfaccia antani1 all&#8217;interno del namespace di rete utilizzato dal nostro processo bash &#8220;speciale&#8221;.</p>
636<p>E ora è tutto semplice dato che abbiamo un collegamento con il mondo &#8220;esterno&#8221; al namespace. Possiamo mettere in bridge l&#8217;interfaccia con una fisica o fare un NAT. Mostrerò questa seconda soluzione (che è quella che ho provato io per poter fare degli esperimenti appunto con NAT e skype). Questo non significa che <a href="https://otacon22.wordpress.com/2011/12/22/network-address-translation/">sia una buona idea fare un NAT</a>.</p>
637<p>Diamo un indirizzo all&#8217;interfaccia fuori dal namespace e diamo qualche comando per abilitare il NAT:<br />
638<code>$ sudo ip addr add 172.16.0.1/24 dev antani0</code></p>
639<p><code>$ sudo ip link set dev antani0 up</code></p>
640<p><code>$ sudo su -c "echo 1 &gt; /proc/sys/net/ipv4/ip_forward"</code></p>
641<p><code>$ sudo iptables -P FORWARD ACCEPT      # Per semplicità, se avete la policy drop aggiungete quelle due regole in più..</code></p>
642<p><code>$ sudo iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j MASQUERADE</code><br />
643E dentro la nostra bash speciale, dove vedremo comparsa la nuova interfaccia, assegnamo un altro ip e impostiamo il gateway di default:<br />
644<code>$ sudo ip addr add 172.16.0.2/24 dev antani1</code></p>
645<p><code>$ sudo ip link set dev antani1 up</code></p>
646<p><code>$ sudo ip route add default via 172.16.0.1 dev wlan0</code><br />
647A questo punto ci basta avviare fuori dal namespace tcpdump o wireshark in ascolto sull&#8217;interfaccia antani0 e lanciare dalla nostra bash &#8220;speciale&#8221; skype (o qualunque altro programma di cui vogliamo catturare il traffico).</p>
648<p>In realtà se notate ho lasciato sottointeso un passaggio: skype e qualunque altro programma lancerete nel nuovo namespace utilizzerà sempre le solite informazioni per il DNS, quelle salvate in /etc/resolv.conf  e /etc/hosts. Queste informazioni risiedono sul filesystem e quindi non sono affette dal namespace di rete, saranno dunque uguali al namespace &#8220;globale&#8221;.<br />
649A me serviva però avere dei DNS diversi per skype, rispetto a quelli globali di sistema. D&#8217;altro canto non volevo cambiare quelli di sistema perché poi mi avrebbero rallentato la risoluzione nomi di tutti i programmi.</p>
650<p>Fortunatamente c&#8217;è anche un modo per risolvere questo problema! Ed è grazie al namespace di mount!<br />
651Infatti oltre al namespace di rete potete abilitare anche il namespace di mount. Questo significa che quando lanciate un programma in un nuovo namespace di mount, vedrete tutti i mount &#8220;soliti&#8221;, però quelli nuovi che farete dall&#8217;interno del namespace saranno visibili solo a voi e non all&#8217;esterno.</p>
652<p>Quindi rifacciamo la procedura di prima cambiando il primo comando in:<br />
653<code>sudo unshare --net --mount /bin/bash</code><br />
654E avremo sia un nuovo namespace di rete che un nuovo namespace di mount.</p>
655<p>Ma perché voglio usare il namespace di mount? Pochi sanno (e non lo sapevo neanche io) che è possibile <span style="text-decoration:underline;">montare un singolo file</span> sopra un&#8217;altro già esistente, usando mount &#8211;bind. Montando un file sopra uno esistente, il risultato sarà che accedendo a quel file vedremo solo l&#8217;ultima &#8220;versione&#8221; montata.<br />
656Possiamo allora creare da qualche parte una versione sostituiva di /etc/resolv.conf, ad esempio in /tmp/, e scriverci dentro <strong>quel cavolo che ci pare</strong>, poi, dall&#8217;interno del nostro namespace di mount (e rete) faremo tipo:<br />
657<code>mount --bind /tmp/resolv.conf /etc/resolv.conf</code><br />
658Ed è fatta! In questo modo abbiamo messo una versione &#8220;nuova&#8221; di /etc/resolv.conf sopra a quella vecchia, nascondendola, e questa modifica sarà visibile solo dall&#8217;interno del nostro bash speciale, dato che stiamo operando, come già detto, in un namespace di mount diverso. Fuori dal namespace di mount nuovo continueremo a vedere la vecchia versione del file. Ci serve farlo anche per /etc/host o /etc/nsswitch.conf (altro file interrogato per risolvere i DNS)? Basta ripetere il mount anche per quegli altri files!</p>
659<p>Tra l&#8217;altro, se siete interessati, è possibile anche spostare una interfaccia di rete esistente, tipo eth0, sfruttando lo stesso comando visto prima per &#8220;spostare&#8221; le interfacce! Anche questo può tornare molto utile</p>
660<p>Tutto questo non è fantastico?</p>
661<p>Tra l&#8217;altro unendo queste cose con anche il namespace PID e user penso sia possibile creare una <strong>sandbox</strong> <span style="text-decoration:underline;"><strong>seria</strong></span> per skype. Se qualcuno si sta chiedendo perché sandboxare skype forse è meglio che vada a informarsi su cosa è successo un po&#8217; di mesi fa quando una versione deoffuscata del programma è girata in rete&#8230;
661 Oltre a questo resta il fatto che è un software proprietario con codice offuscato e che funziona in modo abbastanza strano. Farlo girare in una VM forse è esagerato (e anche scomodo), però con questi trucchetti si possono fare (a mio parere) cose molto interessanti, sia per sandboxare programmi che per fare test di networking vari.</p>
662
663			</div>
664	<br class="clear" />
665	<small class="metadata">
666		<span class="category">Filed under: <a href="https://otacon22.com/category/diario/" rel="category tag">diario</a>, <a href="https://otacon22.com/category/hgcomo/" rel="category tag">hgcomo</a>, <a href="https://otacon22.com/category/informatica/" rel="category tag">informatica</a>	</span>
667		&nbsp;&nbsp;|&nbsp;&nbsp;<a href="https://otacon22.com/2012/10/31/linux-catturare-il-traffico-di-rete-di-un-singolo-processo-usando-i-namespace-di-rete/#comments" class="commentslink" >1&nbsp;<span>Comment</span></a>		<br />Tag:<a href="https://otacon22.com/tag/catturare/" rel="tag">catturare</a>, <a href="https://otacon22.com/tag/iptables/" rel="tag">iptables</a>, <a href="https://otacon22.com/tag/linux/" rel="tag">linux</a>, <a href="https://otacon22.com/tag/lxc/" rel="tag">lxc</a>, <a href="https://otacon22.com/tag/mount/" rel="tag">mount</a>, <a href="https://otacon22.com/tag/namespace/" rel="tag">namespace</a>, <a href="https://otacon22.com/tag/pcap/" rel="tag">pcap</a>, <a href="https://otacon22.com/tag/processo/" rel="tag">processo</a>, <a href="https://otacon22.com/tag/traffico/" rel="tag">traffico</a>, <a href="https://otacon22.com/tag/util-vserver/" rel="tag">util-vserver</a>, <a href="https://otacon22.com/tag/vspace/" rel="tag">vspace</a><br />	</small>
668</div><!-- #post-390 -->
669
670		
671<div id="post-369" class="item entry post-369 post type-post status-publish format-standard hentry category-informatica">
672	<div class="itemhead">
673		<h3>
674					<a href="https://otacon22.com/2012/04/21/appunti-del-corso-reti-di-telecomunicazioni-ed-internet/" rel="bookmark">Appunti del corso &#8220;Reti di telecomunicazioni ed&nbsp;Internet&#8221;</a>
675				</h3>
676		<div class="chronodata">21Apr12</div>
677
678		<!-- The following two sections are for a noteworthy plugin currently in alpha. They'll get cleaned up and integrated better -->
679		
680			
681	</div>
682
683	<div class="itemtext">
684		<p>Tra Ottobre 2011 e Gennaio 2012 presso il <a href="http://www.polimi.it">Politecnico di Milano</a> ho avuto modo di studiare finalmente un po&#8217; i fondamenti delle reti di telecomunicazioni e Internet (Ethernet, IP, TCP, etc&#8230;). Durante il corso mi sono accorto che i libri erano diversi e un po&#8217;
684 tutti incompleti (soprattutto per la seconda parte del corso), quindi alla fine ho deciso di preparare dei miei appunti &#8220;fatti come si deve&#8221;, dai quali è nata una sorta di dispensa.<br />
685Visto che ho svolto molto lavoro e penso possa tornare utile anche ad altri, ho pensato di pubblicarla qua, anche se è un po&#8217; incompleta nelle sue ultime parti. Spero di trovare il tempo di estenderla un po&#8217;!</p>
686<p><a href="http://otacon22.it/upload/reti.pdf">Potete trovarla qua</a></p>
687
688			</div>
689	<br class="clear" />
690	<small class="metadata">
691		<span class="category">Filed under: <a href="https://otacon22.com/category/informatica/" rel="category tag">informatica</a>	</span>
692		&nbsp;&nbsp;|&nbsp;&nbsp;<a href="https://otacon22.com/2012/04/21/appunti-del-corso-reti-di-telecomunicazioni-ed-internet/#comments" class="commentslink" >4&nbsp;<span>Comments</span></a>		<br />	</small>
693</div><!-- #post-369 -->
694
695
696
697	
698	<div class="navigation">
699		<div class="left"><a href="https://otacon22.com/page/2/" ><span>&laquo;</span> Older posts</a></div>
700		<div class="right"></div>
701		<div class="clear"></div>
702	</div>
703
704	
705
706	</div>
707
708	
709<hr />
710
711<ul class="secondary">
712
713<li id="text-3" class="widget widget_text">			<div class="textwidget"><img src="https://otacon22.files.wordpress.com/2012/12/otacon_small.gif" alt="Konnichiwa!" /></div>
714		</li><li id="pages-4" class="widget widget_pages"><h2 class="widgettitle">Pagine</h2>
715
716			<ul>
717				<li class="page_item page-item-510"><a href="https://otacon22.com/talks/">My Talks</a></li>
718			</ul>
719
720			</li></ul>
721<div class="clear"></div>
722
723	<hr />
724<div id="glass-bottomblock">
725
726	<div class="bottomblockleft">
727		<h2>Recent Entries</h2>
728		<div class="sb-latest">
729		<ul>
730				<li><a href='https://otacon22.com/2016/02/21/two-hosting-providers-ipv6-setups-compared-ovh-online-net/'>IPv6 setup in two hosting providers compared: awful (OVH) and awesome&nbsp;(Online.net)</a></li>
731	<li><a href='https://otacon22.com/2013/01/15/network-address-translation-an-abomination-and-horror/'>Network Address Translation: an abomination and&nbsp;horror</a></li>
732	<li><a href='https://otacon22.com/2012/10/31/linux-catturare-il-traffico-di-rete-di-un-singolo-processo-usando-i-namespace-di-rete/'>[Linux] Catturare il traffico di rete di un singolo processo usando i namespace di&nbsp;rete</a></li>
733	<li><a href='https://otacon22.com/2012/04/21/appunti-del-corso-reti-di-telecomunicazioni-ed-internet/' aria-current="page">Appunti del corso &#8220;Reti di telecomunicazioni ed&nbsp;Internet&#8221;</a></li>
734	<li>
734<a href='https://otacon22.com/2012/04/06/routing-ad-hoc-per-alcuni-programmi/'>Routing &#8220;ad-hoc&#8221; per alcuni&nbsp;programmi</a></li>
735	<li><a href='https://otacon22.com/2011/07/08/bussare-sulle-porte-di-rete/'>&#8220;Bussare&#8221; sulle porte di&nbsp;rete</a></li>
736	<li><a href='https://otacon22.com/2011/05/14/bonding-bandwith/'>Incrementare la banda a disposizione &amp; aggirare limitazioni di&nbsp;banda</a></li>
737	<li><a href='https://otacon22.com/2011/02/05/dns-tunneling/'>DNS tunneling</a></li>
738	<li><a href='https://otacon22.com/2011/01/08/guida-a-openvpn-per-gnulinux/'>Guida a OpenVPN per&nbsp;GNU/Linux</a></li>
739	<li><a href='https://otacon22.com/2009/12/26/vita-universitaria/'>Vita universitaria</a></li>
740	<li><a href='https://otacon22.com/2009/07/24/viaggio-in-giappone-2009/'>Viaggio in Giappone&nbsp;2009</a></li>
741		</ul>
742		</div>
743	</div>
744
745	<div class="bottomblockmiddle">
746		<h2>Categorie</h2>
747		<div class="sb-categories">
748		<ul>
749				<li class="cat-item cat-item-2129"><a href="https://otacon22.com/category/diario/">diario</a> (5)
750</li>
751	<li class="cat-item cat-item-15205509"><a href="https://otacon22.com/category/hgcomo/">hgcomo</a> (1)
752</li>
753	<li class="cat-item cat-item-1921"><a href="https://otacon22.com/category/howto/">HowTo</a> (4)
754</li>
755	<li class="cat-item cat-item-3531"><a href="https://otacon22.com/category/informatica/">informatica</a> (9)
756</li>
757	<li class="cat-item cat-item-1"><a href="https://otacon22.com/category/uncategorized/">Uncategorized</a> (1)
758</li>
759		</ul>
760		</div>
761	</div>
762
763	<div class="bottomblockright">
764		<h2>Archivi</h2>
765		<div class="sb-months">
766		<ul>
767				<li><a href='https://otacon22.com/2016/02/'>febbraio 2016</a></li>
768	<li><a href='https://otacon22.com/2013/01/'>gennaio 2013</a></li>
769	<li><a href='https://otacon22.com/2012/10/'>ottobre 2012</a></li>
770	<li><a href='https://otacon22.com/2012/04/'>aprile 2012</a></li>
771	<li><a href='https://otacon22.com/2011/07/'>luglio 2011</a></li>
772	<li><a href='https://otacon22.com/2011/05/'>Maggio 2011</a></li>
773	<li><a href='https://otacon22.com/2011/02/'>febbraio 2011</a></li>
774	<li><a href='https://otacon22.com/2011/01/'>gennaio 2011</a></li>
775	<li><a href='https://otacon22.com/2009/12/'>dicembre 2009</a></li>
776	<li><a href='https://otacon22.com/2009/07/'>luglio 2009</a></li>
777	<li><a href='https://otacon22.com/2009/06/'>giugno 2009</a></li>
778	<li><a href='https://otacon22.com/2006/07/'>luglio 2006</a></li>
779		</ul>
780		</div>
781	</div>
782
783</div>
784	
785</div>
786<div style="clear:both;"></div>
787</div>
788<!-- Close Page -->
789
790<div id="footer"><br /><hr />
791
792<a href="https://wordpress.com/?ref=footer_website" rel="nofollow">Crea un sito o un blog gratuito su WordPress.com.</a>
793</div>
794
795		
795<script type="text/javascript">
796		var infiniteScroll = {"settings":{"id":"primary","ajaxurl":"https://otacon22.com/?infinity=scrolling","type":"scroll","wrapper":true,"wrapper_class":"infinite-wrap","footer":true,"click_handle":"1","text":"Articoli meno recenti","totop":"Scorri in alto","currentday":"21.04.12","order":"DESC","scripts":[],"styles":[],"google_analytics":false,"offset":1,"history":{"host":"otacon22.com","path":"/page/%d/","use_trailing_slashes":true,"parameters":""},"query_args":{"error":"","m":"","p":0,"post_parent":"","subpost":"","subpost_id":"","attachment":"","attachment_id":0,"name":"","pagename":"","page_id":0,"second":"","minute":"","hour":"","day":0,"monthnum":0,"year":0,"w":0,"category_name":"","tag":"","cat":"","tag_id":"","author":"","author_name":"","feed":"","tb":"","paged":0,"meta_key":"","meta_value":"","preview":"","s":"","sentence":"","title":"","fields":"all","menu_order":"","embed":"","category__in":[],"category__not_in":[],"category__and":[],"post__in":[],"post__not_in":[],"post_name__in":[],"tag__in":[],"tag__not_in":[],"tag__and":[],"tag_slug__in":[],"tag_slug__and":[],"post_parent__in":[],"post_parent__not_in":[],"author__in":[],"author__not_in":[],"search_columns":[],"lazy_load_term_meta":false,"posts_per_page":4,"ignore_sticky_posts":false,"suppress_filters":false,"cache_results":true,"update_post_term_cache":true,"update_menu_item_cache":false,"update_post_meta_cache":true,"post_type":"","nopaging":false,"comments_per_page":"50","no_found_rows":false,"order":"DESC"},"query_before":"2026-10-04 07:18:10","last_post_date":"2012-04-21 14:13:15","body_class":"infinite-scroll neverending","loading_text":"Caricamento della nuova pagina","stats":"blog=326248\u0026v=wpcom\u0026tz=1\u0026user_id=0\u0026arch_home=1\u0026subd=otacon22\u0026x_pagetype=infinite"}};
797		</script>
797
798		<!--  -->
799<script type="speculationrules">
800{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/files/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/pub/unsleepable/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
801</script>
vendor: 1 bytes, line 801
801
802<script id="grofiles-cards-js" src="//0.gravatar.com/js/hovercards/hovercards.min.js?ver=202640d1133547e8a1f2801609f51cef12522abe7f6647d869e9fbc974fe356a37e613"></script>
vendor: 1 bytes, line 802
802
803<script id="wpgroho-js-extra">
804var WPGroHo = {"my_hash":""};
805//# sourceURL=wpgroho-js-extra
806</script>
vendor: 1 bytes, line 806
806
807<script crossorigin='anonymous' type='text/javascript'  src='/wp-content/mu-plugins/gravatar-hovercards/wpgroho.js?m=1610363240i'></script>
807
808
809	
809<script>
810		// Initialize and attach hovercards to all gravatars
811		( function() {
812			function init() {
813				if ( typeof Gravatar === 'undefined' ) {
814					return;
815				}
816
817				if ( typeof Gravatar.init !== 'function' ) {
818					return;
819				}
820
821				Gravatar.profile_cb = function ( hash, id ) {
822					WPGroHo.syncProfileData( hash, id );
823				};
824
825				Gravatar.my_hash = WPGroHo.my_hash;
826				Gravatar.init(
827					'body',
828					'#wp-admin-bar-my-account',
829					{
830						i18n: {
831							'Edit your profile →': 'Modifica il tuo profilo →',
832							'View profile →': 'Visualizza profilo →',
833							'Contact': 'Contatti',
834							'Send money': 'Invia denaro',
835							'Sorry, we are unable to load this Gravatar profile.': 'Impossibile caricare questo profilo Gravatar.',
836							'Gravatar not found.': 'Gravatar non trovato.',
837							'Too Many Requests.': 'Troppe richieste.',
838							'Internal Server Error.': 'Errore server interno.',
839							'Is this you?': 'Sei tu?',
840							'Claim your free profile.': 'Richiedi il tuo profilo gratuito.',
841							'Email': 'E-mail',
842							'Home Phone': 'Numero di casa',
843							'Work Phone': 'Telefono aziendale',
844							'Cell Phone': 'Numero di cellulare',
845							'Contact Form': 'Modulo di contatto',
846							'Calendar': 'Calendario',
847						},
848					}
849				);
850			}
851
852			if ( document.readyState !== 'loading' ) {
853				init();
854			} else {
855				document.addEventListener( 'DOMContentLoaded', init );
856			}
857		} )();
858	</script>
858
859
860		<div style="display:none">
861	</div>
862		<div id="infinite-footer">
863			<div class="container">
864				<div class="blog-info">
865					<a id="infinity-blog-title" href="https://otacon22.com/" rel="home">
866						Otacon22 blog					</a>
867				</div>
868				<div class="blog-credits">
869					<a href="https://wordpress.com/?ref=footer_blog" rel="nofollow">Blog su WordPress.com.</a> 				</div>
870			</div>
871		</div><!-- #infinite-footer -->
872				<!-- CCPA [start] -->
873		
873<script type="text/javascript">
874			( function () {
875
876				var setupPrivacy = function() {
877
878					// Minimal Mozilla Cookie library
879					// https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework
880					var cookieLib = window.cookieLib = {getItem:function(e){return e&&decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null},setItem:function(e,o,n,t,r,i){if(!e||/^(?:expires|max\-age|path|domain|secure)$/i.test(e))return!1;var c="";if(n)switch(n.constructor){case Number:c=n===1/0?"; expires=Fri, 31 Dec 9999 23:59:59 GMT":"; max-age="+n;break;case String:c="; expires="+n;break;case Date:c="; expires="+n.toUTCString()}return"rootDomain"!==r&&".rootDomain"!==r||(r=(".rootDomain"===r?".":"")+document.location.hostname.split(".").slice(-2).join(".")),document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(o)+c+(r?"; domain="+r:"")+(t?"; path="+t:"")+(i?"; secure":""),!0}};
881
882					// Implement IAB USP API.
883					window.__uspapi = function( command, version, callback ) {
884
885						// Validate callback.
886						if ( typeof callback !== 'function' ) {
887							return;
888						}
889
890						// Validate the given command.
891						if ( command !== 'getUSPData' || version !== 1 ) {
892							callback( null, false );
893							return;
894						}
895
896						// Check for GPC. If set, override any stored cookie.
897						if ( navigator.globalPrivacyControl ) {
898							callback( { version: 1, uspString: '1YYN' }, true );
899							return;
900						}
901
902						// Check for cookie.
903						var consent = cookieLib.getItem( 'usprivacy' );
904
905						// Invalid cookie.
906						if ( null === consent ) {
907							callback( null, false );
908							return;
909						}
910
911						// Everything checks out. Fire the provided callback with the consent data.
912						callback( { version: 1, uspString: consent }, true );
913					};
914
915					// Initialization.
916					document.addEventListener( 'DOMContentLoaded', function() {
917
918						// Internal functions.
919						var setDefaultOptInCookie = function() {
920							var value = '1YNN';
921							var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
922							cookieLib.setItem( 'usprivacy', value, 365 * 24 * 60 * 60, '/', domain );
923						};
924
925						var setDefaultOptOutCookie = function() {
926							var value = '1YYN';
927							var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
928							cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain );
929						};
930
931						var setDefaultNotApplicableCookie = function() {
932							var value = '1---';
933							var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
934							cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain );
935						};
936
937						var setCcpaAppliesCookie = function( applies ) {
938							var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
939							cookieLib.setItem( 'ccpa_applies', applies, 24 * 60 * 60, '/', domain );
940						}
941
942						var maybeCallDoNotSellCallback = function() {
943							if ( 'function' === typeof window.doNotSellCallback ) {
944								return window.doNotSellCallback();
945							}
946
947							return false;
948						}
949
950						// Look for usprivacy cookie first.
951						var usprivacyCookie = cookieLib.getItem( 'usprivacy' );
952
953						// Found a usprivacy cookie.
954						if ( null !== usprivacyCookie ) {
955
956							// If the cookie indicates that CCPA does not apply, then bail.
957							if ( '1---' === usprivacyCookie ) {
958								return;
959							}
960
961							// CCPA applies, so call our callback to add Do Not Sell link to the page.
962							maybeCallDoNotSellCallback();
963
964							// We're all done, no more processing needed.
965							return;
966						}
967
968						// We don't have a usprivacy cookie, so check to see if we have a CCPA applies cookie.
969						var ccpaCookie = cookieLib.getItem( 'ccpa_applies' );
970
971						// No CCPA applies cookie found, so we'll need to geolocate if this visitor is from California.
972						// This needs to happen client side because we do not have region geo data in our $SERVER headers,
973						// only country data -- therefore we can't vary cache on the region.
974						if ( null === ccpaCookie ) {
975
976							var request = new XMLHttpRequest();
977							request.open( 'GET', 'https://public-api.wordpress.com/geo/', true );
978
979							request.onreadystatechange = function () {
980								if ( 4 === this.readyState ) {
981									if ( 200 === this.status ) {
982
983										// Got a geo response. Parse out the region data.
984										var data = JSON.parse( this.response );
985										var region      = data.region ? data.region.toLowerCase() : '';
986										var ccpa_applies = ['california', 'colorado', 'connecticut', 'delaware', 'indiana', 'iowa', 'montana', 'new jersey', 'oregon', 'tennessee', 'texas', 'utah', 'virginia'].indexOf( region ) > -1;
987										// Set CCPA applies cookie. This keeps us from having to make a geo request too frequently.
988										setCcpaAppliesCookie( ccpa_applies );
989
990										// Check if CCPA applies to set the proper usprivacy cookie.
991										if ( ccpa_applies ) {
992											if ( maybeCallDoNotSellCallback() ) {
993												// Do Not Sell link added, so set default opt-in.
994												setDefaultOptInCookie();
995											} else {
996												// Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe.
997												setDefaultOptOutCookie();
998											}
999										} else {
1000											// CCPA does not apply.
1001											setDefaultNotApplicableCookie();
1002										}
1003									} else {
1004										// Could not geo, so let's assume for now that CCPA applies to be safe.
1005										setCcpaAppliesCookie( true );
1006										if ( maybeCallDoNotSellCallback() ) {
1007											// Do Not Sell link added, so set default opt-in.
1008											setDefaultOptInCookie();
1009										} else {
1010											// Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe.
1011											setDefaultOptOutCookie();
1012										}
1013									}
1014								}
1015							};
1016
1017							// Send the geo request.
1018							request.send();
1019						} else {
1020							// We found a CCPA applies cookie.
1021							if ( ccpaCookie === 'true' ) {
1022								if ( maybeCallDoNotSellCallback() ) {
1023									// Do Not Sell link added, so set default opt-in.
1024									setDefaultOptInCookie();
1025								} else {
1026									// Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe.
1027									setDefaultOptOutCookie();
1028								}
1029							} else {
1030								// CCPA does not apply.
1031								setDefaultNotApplicableCookie();
1032							}
1033						}
1034					} );
1035				};
1036
1037				// Kickoff initialization.
1038				if ( window.defQueue && defQueue.isLOHP && defQueue.isLOHP === 2020 ) {
1039					defQueue.items.push( setupPrivacy );
1040				} else {
1041					setupPrivacy();
1042				}
1043
1044			} )();
1045		</script>
1045
1046
1047		<!-- CCPA [end] -->
1048		<div class="widget widget_eu_cookie_law_widget">
1049<div
1050	class="hide-on-button ads-active"
1051	data-hide-timeout="30"
1052	data-consent-expiration="180"
1053	id="eu-cookie-law"
1054	style="display: none"
1055>
1056	<form method="post">
1057		<input type="submit" value="Chiudi e accetta" class="accept" />
1058
1059		Privacy e cookie: questo sito usa cookie. Continuando a usare questo sito, si accetta l’uso dei cookie. <br />
1060Per scoprire di più anche sul controllo dei cookie, leggi qui:
1061				<a href="https://automattic.com/cookies/" rel="nofollow">
1062			Informativa sui cookie		</a>
1063 </form>
1064</div>
1065</div>			<div id="actionbar" dir="ltr" style="display: none;"
1066				class="actnbr-pub-unsleepable" role="region" aria-label="Azioni del sito">
1067			<span class="actnbr-live" aria-live="polite"></span>
1068			<ul>
1069										<li class="actnbr-btn actnbr-hidden">
1070										<a class="actnbr-action actnbr-actn-follow " href="" role="button" aria-haspopup="dialog" aria-expanded="false">
1071				<svg class="actnbr-icon actnbr-icon-bell" width="20" height="20" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M17 11.5c0 1.353.17 2.368.976 3 .266.209.602.376 1.024.5v1H5v-1c.422-.124.757-.291 1.024-.5.806-.632.976-1.647.976-3V9c0-2.8 2.2-5 5-5s5 2.2 5 5v2.5ZM15.5 9v2.5c0 .93.066 1.98.515 2.897l.053.103H7.932a4.018 4.018 0 0 0 .053-.103c.449-.917.515-1.967.515-2.897V9c0-1.972 1.528-3.5 3.5-3.5s3.5 1.528 3.5 3.5Zm-5.492 9.008c0-.176.023-.346.065-.508h3.854A1.996 1.996 0 0 1 12 20c-1.1 0-1.992-.892-1.992-1.992Z"/></svg>				<span>Abbonati</span>
1072			</a>
1073			<a class="actnbr-action actnbr-actn-following  no-display" href="" role="button">
1074				<svg class="actnbr-icon actnbr-icon-check" width="20" height="20" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" style="fill: none" stroke="currentColor" stroke-width="1.5"><path d="M7 12L10 15L17 8" vector-effect="non-scaling-stroke"/></svg>				<span>Abbonato</span>
1075			</a>
1076									<div class="actnbr-popover actnbr-panel actnbr-notice" id="follow-bubble" role="dialog" aria-label="Iscriviti a Otacon22 blog">
1077								<div class="actnbr-follow-bubble">
1078								<div class="actnbr-panel__group"><a class="actnbr-menu__item actnbr-sitename" href="https://otacon22.com"><img loading='lazy' alt='' src='https://s-ssl.wordpress.com/i/logo/wpcom-gray-white.png?m=1479929237i' srcset='https://s-ssl.wordpress.com/i/logo/wpcom-gray-white.png 1x' class='avatar avatar-50' height='50' width='50' /><span class="actnbr-menu__label">Otacon22 blog</span></a></div>																	<div class="actnbr-panel__group">
1079										<div class="actnbr-message no-display" aria-live="polite"></div>
1080										<form method="post" action="https://subscribe.wordpress.com" accept-charset="utf-8" class="no-display">
1081																						<input type="email" name="email" placeholder="Vuoi ricevere aggiornamenti? Inserisci la tua e-mail" class="actnbr-email-field" aria-label="Indirizzo e-mail" />
1082											<input type="hidden" name="action" value="subscribe" />
1083											<input type="hidden" name="blog_id" value="326248" />
1084											<input type="hidden" name="source" value="https://otacon22.com/" />
1085											<input type="hidden" name="sub-type" value="actionbar-follow" />
1086											<input type="hidden" id="_wpnonce" name="_wpnonce" value="746a838a22" />											<button type="submit" class="actnbr-button">Registrami</button>
1087										</form>
1088										<p class="actnbr-login-nudge">
1089											Hai un account WordPress.com? <a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fotacon22.com%252F2016%252F02%252F21%252Ftwo-hosting-providers-ipv6-setups-compared-ovh-online-net%252F">Accedi ora.</a>										</p>
1090									</div>
1091																	</div>
1092							</div>
1093						</li>
1094									<li class="actnbr-ellipsis actnbr-hidden">
1095					<button type="button" class="actnbr-more-toggle" aria-haspopup="true" aria-expanded="false" aria-label="Altre opzioni">
1096						<svg class="actnbr-icon actnbr-icon-more-horizontal" width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path d="M11 13h2v-2h-2v2zm-6 0h2v-2H5v2zm12-2v2h2v-2h-2z"/></svg>					</button>
1097					<div class="actnbr-popover actnbr-menu" role="menu" aria-label="Opzioni del sito">
1098						<div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-sitename" href="https://otacon22.com"><img loading='lazy' alt='' src='https://s-ssl.wordpress.com/i/logo/wpcom-gray-white.png?m=1479929237i' srcset='https://s-ssl.wordpress.com/i/logo/wpcom-gray-white.png 1x' class='avatar avatar-50' height='50' width='50' /><span class="actnbr-menu__label">Otacon22 blog</span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-reader" href="https://wordpress.com/reader/feeds/5953373"><span class="actnbr-menu__label">Visualizza sito nel Reader</span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-subs" href="https://subscribe.wordpress.com/"><span class="actnbr-menu__label">Gestisci gli abbonamenti</span></a><a role="menuitem" class="actnbr-menu__item actnbr-signup" href="https://wordpress.com/start/"><span class="actnbr-menu__label">Registrati</span></a><a role="menuitem" class="actnbr-menu__item actnbr-login" href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fotacon22.com%252F2016%252F02%252F21%252Ftwo-hosting-providers-ipv6-setups-compared-ovh-online-net%252F"><span class="actnbr-menu__label">Accedi</span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item flb-report" href="https://wordpress.com/abuse/?report_url=https://
1098otacon22.com" target="_blank" rel="noopener noreferrer"><span class="actnbr-menu__label">Segnala questo contenuto</span><span class="actnbr-menu__icon"><svg class="actnbr-icon actnbr-icon-external" width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path d="M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"/></svg></span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-fold" href=""><span class="actnbr-menu__label">Riduci la barra</span></a></div>					</div>
1099				</li>
1100			</ul>
1101		</div>
1102		
1102<script>
1103window.addEventListener( "DOMContentLoaded", function () {
1104				var link = document.createElement( "link" );
1105				link.href = "\/wp-content\/mu-plugins\/jetpack-plugin\/moon\/jetpack_vendor\/automattic\/jetpack-newsletter\/src\/..\/build\/action-bar.css?ver=35dd33285eb46dc308dd";
1106				link.rel = "stylesheet";
1107				document.head.appendChild( link );
1108
1109				var script = document.createElement( "script" );
1110				script.src = "\/wp-content\/mu-plugins\/jetpack-plugin\/moon\/jetpack_vendor\/automattic\/jetpack-newsletter\/src\/..\/build\/action-bar.js?ver=35dd33285eb46dc308dd";
1111				document.body.appendChild( script );
1112			} );
1113</script>
1113
1114<link rel="prefetch" href="/wp-content/mu-plugins/jetpack-plugin/moon/_inc/blocks/swiper.js" as="script" />
1115		<div id="jp-carousel-loading-overlay" style="display: none;">
1116			<div id="jp-carousel-loading-wrapper">
1117				<span id="jp-carousel-library-loading"><svg class="jetpack-spinner" width="40" height="40" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><circle cx="50" cy="50" r="46" fill="none" stroke="#ddd" stroke-width="8"/><path d="M 50 4 A 46 46 0 0 1 96 50" fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" dur="1.4s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/></path></svg></span>
1118			</div>
1119		</div>
1120		<div class="jp-carousel-overlay" style="display: none;">
1121
1122		<div class="jp-carousel-container">
1123			<!-- The Carousel Swiper -->
1124			<div
1125				class="jp-carousel-wrap swiper jp-carousel-swiper-container jp-carousel-transitions"
1126				itemscope
1127				itemtype="https://schema.org/ImageGallery">
1128				<div class="jp-carousel swiper-wrapper"></div>
1129				<div class="jp-swiper-button-prev swiper-button-prev">
1130					<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1131						<mask id="maskPrev" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="9" height="12">
1132							<path d="M16.2072 16.59L11.6496 12L16.2072 7.41L14.8041 6L8.8335 12L14.8041 18L16.2072 16.59Z" fill="white"/>
1133						</mask>
1134						<g mask="url(#maskPrev)">
1135							<rect x="0.579102" width="23.8823" height="24" fill="#FFFFFF"/>
1136						</g>
1137					</svg>
1138				</div>
1139				<div class="jp-swiper-button-next swiper-button-next">
1140					<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1141						<mask id="maskNext" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="8" height="12">
1142							<path d="M8.59814 16.59L13.1557 12L8.59814 7.41L10.0012 6L15.9718 12L10.0012 18L8.59814 16.59Z" fill="white"/>
1143						</mask>
1144						<g mask="url(#maskNext)">
1145							<rect x="0.34375" width="23.8822" height="24" fill="#FFFFFF"/>
1146						</g>
1147					</svg>
1148				</div>
1149			</div>
1150			<!-- The main close buton -->
1151			<div class="jp-carousel-close-hint">
1152				<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1153					<mask id="maskClose" mask-type="alpha" maskUnits="userSpaceOnUse" x="5" y="5" width="15" height="14">
1154						<path d="M19.3166 6.41L17.9135 5L12.3509 10.59L6.78834 5L5.38525 6.41L10.9478 12L5.38525 17.59L6.78834 19L12.3509 13.41L17.9135 19L19.3166 17.59L13.754 12L19.3166 6.41Z" fill="white"/>
1155					</mask>
1156					<g mask="url(#maskClose)">
1157						<rect x="0.409668" width="23.8823" height="24" fill="#FFFFFF"/>
1158					</g>
1159				</svg>
1160			</div>
1161			<!-- Image info, comments and meta -->
1162			<div class="jp-carousel-info">
1163				<div class="jp-carousel-info-footer">
1164					<div class="jp-carousel-pagination-container">
1165						<div class="jp-swiper-pagination swiper-pagination"></div>
1166						<div class="jp-carousel-pagination"></div>
1167					</div>
1168					<div class="jp-carousel-photo-title-container">
1169						<div class="jp-carousel-photo-caption"></div>
1170					</div>
1171					<div class="jp-carousel-photo-icons-container">
1172						<a href="#" class="jp-carousel-icon-btn jp-carousel-icon-info" aria-label="Attiva/disattiva visibilità dei metadata delle foto">
1173							<span class="jp-carousel-icon">
1174								<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1175									<mask id="maskInfo" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20">
1176										<path fill-rule="evenodd" clip-rule="evenodd" d="M12.7537 2C7.26076 2 2.80273 6.48 2.80273 12C2.80273 17.52 7.26076 22 12.7537 22C18.2466 22 22.7046 17.52 22.7046 12C22.7046 6.48 18.2466 2 12.7537 2ZM11.7586 7V9H13.7488V7H11.7586ZM11.7586 11V17H13.7488V11H11.7586ZM4.79292 12C4.79292 16.41 8.36531 20 12.7537 20C17.142 20 20.7144 16.41 20.7144 12C20.7144 7.59 17.142 4 12.7537 4C8.36531 4 4.79292 7.59 4.79292 12Z" fill="white"/>
1177									</mask>
1178									<g mask="url(#maskInfo)">
1179										<rect x="0.8125" width="23.8823" height="24" fill="#FFFFFF"/>
1180									</g>
1181								</svg>
1182							</span>
1183						</a>
1184												<a href="#" class="jp-carousel-icon-btn jp-carousel-icon-comments" aria-label="Attiva/disattiva visibilità dei commenti alle foto">
1185							<span class="jp-carousel-icon">
1186								<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1187									<mask id="maskComments" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20">
1188										<path fill-rule="evenodd" clip-rule="evenodd" d="M4.3271 2H20.2486C21.3432 2 22.2388 2.9 22.2388 4V16C22.2388 17.1 21.3432 18 20.2486 18H6.31729L2.33691 22V4C2.33691 2.9 3.2325 2 4.3271 2ZM6.31729 16H20.2486V4H4.3271V18L6.31729 16Z" fill="white"/>
1189									</mask>
1190									<g mask="url(#maskComments)">
1191										<rect x="0.34668" width="23.8823" height="24" fill="#FFFFFF"/>
1192									</g>
1193								</svg>
1194
1195								<span class="jp-carousel-has-comments-indicator" aria-label="Questa immagine ha dei commenti."></span>
1196							</span>
1197						</a>
1198											</div>
1199				</div>
1200				<div class="jp-carousel-info-extra">
1201					<div class="jp-carousel-info-content-wrapper">
1202						<div class="jp-carousel-photo-title-container">
1203							<div class="jp-carousel-photo-title"></div>
1204						</div>
1205						<div class="jp-carousel-comments-wrapper">
1206															<div id="jp-carousel-comments-loading">
1207									<span>Caricamento commenti...</span>
1208								</div>
1209								<div class="jp-carousel-comments"></div>
1210								<div id="jp-carousel-comment-form-container">
1211									<span id="jp-carousel-comment-form-spinner"><svg class="jetpack-spinner" width="20" height="20" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><circle cx="50" cy="50" r="46" fill="none" stroke="#ddd" stroke-width="8"/><path d="M 50 4 A 46 46 0 0 1 96 50" fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" dur="1.4s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/></path></svg></span>
1212									<div id="jp-carousel-comment-post-results"></div>
1213																														<form id="jp-carousel-comment-form">
1214												<label for="jp-carousel-comment-form-comment-field" class="screen-reader-text">Scrivi un Commento...</label>
1215												<textarea
1216													name="comment"
1217													class="jp-carousel-comment-form-field jp-carousel-comment-form-textarea"
1218													id="jp-carousel-comment-form-comment-field"
1219													placeholder="Scrivi un Commento..."
1220												></textarea>
1221												<div id="jp-carousel-comment-form-submit-and-info-wrapper">
1222													<div id="jp-carousel-comment-form-commenting-as">
1223																													<fieldset>
1224																<label for="jp-carousel-comment-form-email-field">E-mail (Obbligatorio)</label>
1225																<input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field" />
1226															</fieldset>
1227															<fieldset>
1228																<label for="jp-carousel-comment-form-author-field">Nome (Obbligatorio)</label>
1229																<input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field" />
1230															</fieldset>
1231															<fieldset>
1232																<label for="jp-carousel-comment-form-url-field">Sito web</label>
1233																<input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field" />
1234															</fieldset>
1235																											</div>
1236													<input
1237														type="submit"
1238														name="submit"
1239														class="jp-carousel-comment-form-button"
1240														id="jp-carousel-comment-form-button-submit"
1241														value="Pubblica un commento" />
1242												</div>
1243											</form>
1244																											</div>
1245													</div>
1246						<div class="jp-carousel-image-meta">
1247							<div class="jp-carousel-title-and-caption">
1248								<div class="jp-carousel-photo-info">
1249									<div class="jp-carousel-caption" itemprop="caption description"></div>
1250								</div>
1251
1252								<div class="jp-carousel-photo-description"></div>
1253							</div>
1254							<a class="jp-carousel-image-download" href="#" aria-label="Scarica immagine" target="_blank" style="display: none;">
1255								<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1256									<mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="3" y="3" width="19" height="18">
1257										<path fill-rule="evenodd" clip-rule="evenodd" d="M5.84615 5V19H19.7775V12H21.7677V19C21.7677 20.1 20.8721 21 19.7775 21H5.84615C4.74159 21 3.85596 20.1 3.85596 19V5C3.85596 3.9 4.74159 3 5.84615 3H12.8118V5H5.84615ZM14.802 5V3H21.7677V10H19.7775V6.41L9.99569 16.24L8.59261 14.83L18.3744 5H14.802Z" fill="white"/>
1258									</mask>
1259									<g mask="url(#mask0)">
1260										<rect x="0.870605" width="23.8823" height="24" fill="#FFFFFF"/>
1261									</g>
1262								</svg>
1263								<span class="jp-carousel-download-text"></span>
1264							</a>
1265							<div class="jp-carousel-image-map" style="display: none;"></div>
1266						</div>
1267					</div>
1268				</div>
1269			</div>
1270		</div>
1271
1272		</div>
1273		
1274	
1274<script type="text/javascript">
1275		(function () {
1276			var wpcom_reblog = {
1277				source: 'toolbar',
1278
1279				toggle_reblog_box_flair: function (obj_id, post_id) {
1280
1281					// Go to site selector. This will redirect to their blog if they only have one.
1282					const postEndpoint = `https://wordpress.com/post`;
1283
1284					// Ideally we would use the permalink here, but fortunately this will be replaced with the 
1285					// post permalink in the editor.
1286					const originalURL = `${ document.location.href }?page_id=${ post_id }`; 
1287					
1288					const url =
1289						postEndpoint +
1290						'?url=' +
1291						encodeURIComponent( originalURL ) +
1292						'&is_post_share=true' +
1293						'&v=5';
1294
1295					const redirect = function () {
1296						if (
1297							! window.open( url, '_blank' )
1298						) {
1299							location.href = url;
1300						}
1301					};
1302
1303					if ( /Firefox/.test( navigator.userAgent ) ) {
1304						setTimeout( redirect, 0 );
1305					} else {
1306						redirect();
1307					}
1308				},
1309			};
1310
1311			window.wpcom_reblog = wpcom_reblog;
1312		})();
1313	</script>
vendor: 1 bytes, line 1313
1313
1314<script crossorigin='anonymous' type='text/javascript'  src='/_static/??/wp-content/blog-plugins/wordads-classes/js/watl-v2.js,/wp-content/mu-plugins/widgets/eu-cookie-law/templates/eu-cookie-law.js?m=1760446017j'></script>
vendor: 1 bytes, line 1314
1314
1315<script data-wp-strategy="defer" defer id="wpcom-marketing-bar-js" src="/wp-content/blog-plugins/marketing-bar/js/marketing-bar.js?m=1790359692i&#038;ver=20260925"></script>
vendor: 1 bytes, line 1315
1315
1316<script id="jetpack-carousel-js-extra">
1317var jetpackSwiperLibraryPath = {"url":"/wp-content/mu-plugins/jetpack-plugin/moon/_inc/blocks/swiper.js"};
1318var jetpackCarouselStrings = {"widths":[370,700,1000,1200,1400,2000],"is_logged_in":"","lang":"it","ajaxurl":"https://otacon22.com/wp-admin/admin-ajax.php","nonce":"bc5f3f5a12","display_exif":"1","display_comments":"1","single_image_gallery":"1","single_image_gallery_media_file":"","background_color":"black","comment":"Commento","post_comment":"Pubblica un commento","write_comment":"Scrivi un Commento...","loading_comments":"Caricamento commenti...","image_label":"Apri immagine a schermo intero.","download_original":"Vedi immagine a grandezza originale\u003Cspan class=\"photo-size\"\u003E{0}\u003Cspan class=\"photo-size-times\"\u003E\u00d7\u003C/span\u003E{1}\u003C/span\u003E","no_comment_text":"Assicurati di scrivere del testo nel commento.","no_comment_email":"Fornisci un indirizzo e-mail per commentare.","no_comment_author":"Fornisci il tuo nome per commentare.","comment_post_error":"Si \u00e8 verificato un problema durante la pubblicazione del commento. Riprova pi\u00f9 tardi.","comment_approved":"Il tuo commento \u00e8 stato approvato.","comment_unapproved":"Il tuo commento deve venire moderato.","camera":"Fotocamera","aperture":"Apertura","shutter_speed":"Velocit\u00e0 di scatto","focal_length":"Lunghezza focale","copyright":"Copyright","comment_registration":"0","require_name_email":"1","login_url":"https://otacon22.wordpress.com/wp-login.php?redirect_to=https%3A%2F%2Fotacon22.com%2F2012%2F04%2F21%2Fappunti-del-corso-reti-di-telecomunicazioni-ed-internet%2F","blog_id":"326248","meta_data":["camera","aperture","shutter_speed","focal_length","copyright"],"stats_query_args":"blog=326248&v=wpcom&tz=1&user_id=0&arch_home=1&subd=otacon22","is_public":"1"};
1319//# sourceURL=jetpack-carousel-js-extra
1320</script>
vendor: 1 bytes, line 1320
1320
1321<script crossorigin='anonymous' type='text/javascript'  src='/_static/??-eJydjMENgzAMABdqMKgI6KNiFBTcFDk4dkQSVWzfDzAAzzudDn7RoEp2kiEUE7ksJAm8y9HiejAEVYGJBGEuxB8g+ZJQdibhpswn71UgqXx6wK0r2k1Lcnx1pzi2Y3g3/auu+7Z7Dv4P1zJE/g=='></script>
vendor: 1 bytes, line 1321
1321
1322<script data-wp-strategy="defer" defer id="tiled-gallery-js" src="/wp-content/mu-plugins/jetpack-plugin/moon/_inc/build/tiled-gallery/tiled-gallery/tiled-gallery.min.js?m=1755006225i&#038;ver=16.3-a.8"></script>
vendor: 1 bytes, line 1322
1322
1323<script crossorigin='anonymous' type='text/javascript'  src='/wp-content/mu-plugins/carousel-wpcom/carousel-wpcom.js?m=1761899756i'></script>
vendor: 1 bytes, line 1323
1323
1324<script id="wp-emoji-settings" type="application/json">
1325{"baseUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/","ext":".png","svgUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/svg/","svgExt":".svg","source":{"concatemoji":"/wp-includes/js/wp-emoji-release.min.js?m=1783090810i&ver=7.2-alpha-63885"}}
1326</script>
vendor: 1 bytes, line 1326
1326
1327<script type="module">
1328/*! This file is auto-generated */
1329var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\udec8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
1330//# sourceURL=/wp-includes/js/wp-emoji-loader.min.js
1331</script>
1331
1332		
1332<script type="text/javascript">
1333			(function() {
1334				var extend = function(out) {
1335					out = out || {};
1336
1337					for (var i = 1; i < arguments.length; i++) {
1338						if (!arguments[i])
1339						continue;
1340
1341						for (var key in arguments[i]) {
1342						if (arguments[i].hasOwnProperty(key))
1343							out[key] = arguments[i][key];
1344						}
1345					}
1346
1347					return out;
1348				};
1349				extend( window.infiniteScroll.settings.scripts, ["jetpack-mu-wpcom-settings","rlt-proxy","cmp-script-stub","wpcom-actionbar-placeholder","grofiles-cards","wpgroho","wordads-client","eu-cookie-law-script","wpcom-marketing-bar","the-neverending-homepage","jetpack-carousel","tiled-gallery","carousel-wpcom"] );
1350				extend( window.infiniteScroll.settings.styles, ["eu-cookie-law-style","free-site-marketing-bar","the-neverending-homepage","infinity-unsleepable","coblocks-frontend","wpcom-core-compat-playlist-styles","wpcom-text-widget-styles","wpcom-bbpress2-staff-css","unsleepable","reblogging","geo-location-flair","a8c-global-print","h4-global","wp-img-auto-sizes-contain","wp-emoji-styles","wp-block-library","classic-theme-styles","wp-block-styles-placeholder","coblocks-inline-format","wp-global-styles-placeholder","jetpack-global-styles-frontend-style","global-styles","jetpack-swiper-library","jetpack-carousel","tiled-gallery","core-block-supports-duotone"] );
1351			})();
1352		</script>
1352
1353				<span id="infinite-aria" aria-live="polite"></span>
1354		
1354<script src="//stats.wp.com/w.js?69" defer></script>
1354 
1354<script type="text/javascript">
1355_tkq = window._tkq || [];
1356_stq = window._stq || [];
1357_tkq.push(['storeContext', {'blog_id':'326248','blog_tz':'1','user_lang':'it','blog_lang':'it','user_id':'0'}]);
1358		// Prevent sending pageview tracking from WP-Admin pages.
1359		_stq.push(['view', {'blog':'326248','v':'wpcom','tz':'1','user_id':'0','arch_home':'1','subd':'otacon22'}]);
1360		_stq.push(['extra', {'crypt':'UE5XaGUuOTlwaD85flAmcm1mcmZsaDhkV11YdWtpP0NsWnVkPS9sL0ViLndld3BuVT01Uj14Ti1yYTBnX3xuYUQ3Qz1oblZbVHV3MTZ6aj0wcy01aFV6Y1RhRDhuPzkwMncsNm1ad0EldTZtNXh1JSxyYW44MzAxMFBndmg2Wy16eVsyMS1CX1JPWk4yTzlaMm5BU3lteUM/ZU1DTDVTX1lVMDJIaURlW1VaK3AuVXMwSEQ2UGYsNkV0dUxLWUs4a3JaQ2pPenJaej9vNjhIWmR8VEwzRzZEd3M1ZDk2WCZDVSwuMFZVVDdGakpLNWNiVndSbmwsKy5uYTE5NzBGMU5lUithTW0lfjNkTkpvYTd+YlJkW28xP00lSWllSitmZDlackNdTU94Q202QXlPQ0xGazByVTdYaDltPW0wbUFyQz9WWVJBdFVmbEdWYXVNfA=='}]);
1361_stq.push([ 'clickTrackerInit', '326248', '0' ]);
1362</script>
1362
1363<noscript><img src="https://pixel.wp.com/b.gif?v=noscript" style="height:1px;width:1px;overflow:hidden;position:absolute;bottom:1px;" alt="" /></noscript>
1364<meta id="bilmur" property="bilmur:data" content="" data-provider="wordpress.com" data-service="simple" data-site-tz="Etc/GMT-1" data-custom-props="{&quot;logged_in&quot;:&quot;0&quot;,&quot;wptheme&quot;:&quot;pub\/unsleepable&quot;,&quot;wptheme_is_block&quot;:&quot;0&quot;}"   >
1365		
1365<script defer src="/wp-content/js/bilmur.min.js?i=19&amp;m=202640"></script>
1365 	<div id="marketingbar" class="marketing-bar noskim" data-event-properties="{&quot;is_current_user_blog_owner&quot;:false}"><div class="marketing-bar-text">Progetta un sito come questo con WordPress.com</div><a class="marketing-bar-button" href="https://wordpress.com/start/it?ref=marketing_bar">Comincia ora</a><a class="marketing-bar-link" tabindex="-1" aria-label="Crea il tuo sito web su WordPress.com" href="https://wordpress.com/start/it?ref=marketing_bar"></a></div>
1366
1367</body>
1368</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.