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

<channel>
	<title>Nützliches Archive - Maximilian Krieg</title>
	<atom:link href="https://maximiliankrieg.de/category/technik/nuetzliches/feed/" rel="self" type="application/rss+xml" />
	<link>https://maximiliankrieg.de/category/technik/nuetzliches/</link>
	<description>Wissen, Technik &#38; Erfahrungen</description>
	<lastBuildDate>Sun, 14 Jun 2026 09:58:42 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://maximiliankrieg.de/wp-content/uploads/2026/05/cropped-20260524_logo_2_512-2-32x32.png</url>
	<title>Nützliches Archive - Maximilian Krieg</title>
	<link>https://maximiliankrieg.de/category/technik/nuetzliches/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Erkennung und Vermeidung eines E-Mail-Sturms (User)</title>
		<link>https://maximiliankrieg.de/2026/06/erkennung-und-vermeidung-eines-e-mail-sturms/</link>
					<comments>https://maximiliankrieg.de/2026/06/erkennung-und-vermeidung-eines-e-mail-sturms/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 19:38:15 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=2703</guid>

					<description><![CDATA[<p>Vor kurzem erhielt ich eine scheinbar harmlose E-Mail von einem Autohändler in Esslingen. Der Inhalt war lediglich eine automatische Eingangsbestätigung für eine Anfrage. Das Kuriose&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2026/06/erkennung-und-vermeidung-eines-e-mail-sturms/">Erkennung und Vermeidung eines E-Mail-Sturms (User)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Vor kurzem erhielt ich eine scheinbar harmlose E-Mail von einem Autohändler in Esslingen. Der Inhalt war lediglich eine automatische Eingangsbestätigung für eine Anfrage. Das Kuriose daran: Ich hatte weder eine Anfrage gestellt noch einen Bezug zu dem Vorgang.</p>



<p class="wp-block-paragraph">In diesem Artikel beschreibe ich die Analyse der E-Mail-Header, die Identifikation eines sogenannten <strong>E-Mail-Sturms</strong> sowie die Maßnahmen, mit denen sich der Empfang weiterer Nachrichten dieser Mailingliste verhindern ließ. E-Mail-Stürme sind selten, aber wenn sie auftreten, können sie Postfächer fluten, Systeme belasten und im schlimmsten Fall produktive Arbeit lahmlegen.</p>



<h2 class="wp-block-heading">Die initiale E-Mail</h2>



<p class="wp-block-paragraph">Beim Blick auf die E-Mail-Header fällt auf, dass die Nachricht nicht direkt vom Autohändler an mich sondern eine Mail-Gruppe gesendet wird. Eine genauere <strong>Analyse der Header</strong> über <a href="https://mxtoolbox.com/EmailHeaders.aspx">mxtoolbox.com</a> zeigt jedoch schnell, dass die Nachricht technisch korrekt zugestellt wurde und keine Anzeichen für Phishing oder Schadsoftware enthält.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a4e200bc76b9&quot;}" data-wp-interactive="core/image" data-wp-key="6a4e200bc76b9" class="wp-block-image size-full wp-lightbox-container"><img fetchpriority="high" decoding="async" width="973" height="533" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail-storm.png" alt="" class="wp-image-2704" srcset="https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail-storm.png 973w, https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail-storm-300x164.png 300w, https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail-storm-768x421.png 768w" sizes="(max-width: 973px) 100vw, 973px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Inhalt und Empfänger der initialen E-Mail</figcaption></figure>



<p class="wp-block-paragraph">Obwohl die Mail inhaltlich keine Anzeichen schadhaften Zweckes hat und auch nicht nach klassischem Spam aussieht, sind dennoch alle klassischen Indikatoren einer Spam-Mail oder eines nicht-regelkonform konfigurierten Mail-Dienstes gegeben wie das folgende Bild zeigt.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a4e200bc7b5f&quot;}" data-wp-interactive="core/image" data-wp-key="6a4e200bc7b5f" class="wp-block-image size-full wp-lightbox-container"><img decoding="async" width="640" height="211" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail_delivery-Information.png" alt="" class="wp-image-2706" srcset="https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail_delivery-Information.png 640w, https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail_delivery-Information-300x99.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Delivery Information im Analyzer</figcaption></figure>



<p class="wp-block-paragraph">Anhand der <code>Received</code>-Header lässt sich nachvollziehen, welchen Weg die E-Mail vom ursprünglichen Absender bis in mein Postfach genommen hat. In E-Mail-Analysen, wie vom <strong>Email Header Analyzer</strong>, wird häufig eine Tabelle erstellt, die jeden sogenannten Übergabepunkt (Hop) einer E-Mail auflistet. Die Analyse liefert neben der folgenden Tabelle auch noch Informationen zu <strong>Blacklist</strong>-Einträgen zu den jeweiligen Hops.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Hop</th><th class="has-text-align-left" data-align="left">From</th><th class="has-text-align-left" data-align="left">By</th><th class="has-text-align-left" data-align="left">With</th><th class="has-text-align-left" data-align="left">Blacklist</th></tr></thead><tbody><tr><td>1</td><td>FR6P281MB5377.DEUP281.PROD.OUTLOOK.COM fe80::6f04:856e:eed:e62</td><td>FR6P281MB5377.DEUP281.PROD.OUTLOOK.COM fe80::6f04:856e:eed:e62</td><td>mapi</td><td>OK</td></tr><tr><td>2</td><td>FR6P281MB5377.DEUP281.PROD.OUTLOOK.COM 2603:10a6:d10:1a7::12</td><td>FR5P281MB5447.DEUP281.PROD.OUTLOOK.COM 2603:10a6:d10:1ae::18</td><td>Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)</td><td>OK</td></tr><tr><td>3</td><td>mail-germanywestcentralazon11022108.outbound.protection.outlook.com 40.107.149.108</td><td>mx-gate33-hz1</td><td>&nbsp;</td><td>OK</td></tr><tr><td>4</td><td>mx-relay33-hz1-if1.hornetsecurity.com 94.100.128.43</td><td>mx.google.com</td><td>ESMTPS</td><td>OK</td></tr><tr><td>5</td><td></td><td>2002:a05:600c:63ca:b0:490:482f:65d8</td><td>SMTP</td><td></td></tr><tr><td>6</td><td></td><td>mail-wm1-x347.google.com</td><td>SMTP</td><td></td></tr><tr><td>7</td><td>mail-wm1-x347.google.com 2a00:1450:4864:20::347</td><td>smtpin.rzone.de</td><td>ESMTPS</td><td>OK</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">In den Headern können wir weiterhin die Details zu der Mailing-Liste bzw. Google Gruppe finden.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Header Name</th><th>Header Value</th></tr></thead><tbody><tr><td>Precedence</td><td>list</td></tr><tr><td>Mailing-list</td><td>list 7b@gfx4mcd.com; contact 7b+owners@gfx4mcd.com</td></tr><tr><td>List-ID</td><td>&lt;7b.gfx4mcd.com&gt;</td></tr><tr><td>X-Spam-Checked-In-Group</td><td>7b@gfx4mcd.com</td></tr><tr><td>X-Google-Group-Id</td><td>3090089275</td></tr><tr><td>List-Post</td><td>&lt;https://groups.google.com/a/gfx4mcd.com/group/7b/post&gt;, &lt;mailto:7b@gfx4mcd.com&gt;</td></tr><tr><td>List-Help</td><td>&lt;https://support.google.com/a/gfx4mcd.com/bin/topic.py?topic=25838&gt;, &lt;mailto:7b+help@gfx4mcd.com&gt;</td></tr><tr><td>List-Archive</td><td>&lt;https://groups.google.com/a/gfx4mcd.com/group/7b/&gt;</td></tr><tr><td>List-Unsubscribe</td><td>&lt;mailto:googlegroups-manage+3090089275+unsubscribe@googlegroups.com&gt;, &lt;https://groups.google.com/a/gfx4mcd.com/group/7b/subscribe&gt;</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Generell wirkt die Nachricht daher auf mich wie klassischer Spam:</p>



<ul class="wp-block-list">
<li>Eine Antwort auf eine Nachricht, die ich nie versendet habe.</li>



<li>Empfänger- und Absenderadresse sowie <code>Reply-to</code>-Adresse (<em>Antwort an</em>) passen nicht zum Inhalt.</li>



<li>Es wurde eine mir unbekannte Google Group bzw. Mailingliste mit der Adresse <code>7b@gfx4mcd.com</code> verwendet.</li>
</ul>



<p class="wp-block-paragraph">Kurze Zeit später trafen weitere Nachrichten ein. Zahlreiche Empfänger antworteten auf die ursprüngliche E-Mail und fragten, warum sie diese Nachricht erhalten hatten oder baten darum, aus der Liste entfernt zu werden.</p>



<p class="wp-block-paragraph">Damit begann ein klassischer E-Mail-Sturm.</p>



<h2 class="wp-block-heading">Beschreibung eines E-Mail-Sturms</h2>



<p class="wp-block-paragraph">Ein E-Mail-Sturm (engl. <em>Mail-Storm</em>, <em>Reply-Storm</em> oder <em>Reply-All-Storm</em>) entsteht, wenn eine Nachricht an einen großen Verteiler oder eine Mailingliste versendet wird und zahlreiche Empfänger auf die E-Mail antworten. Dabei erfolgt die Antwort entweder über die konfigurierte Reply-To-Adresse oder durch die Mail-Funktion <strong>Allen antworten</strong>.</p>



<p class="wp-block-paragraph">Jede Antwort wird anschließend erneut an alle Mitglieder des Verteilers zugestellt. Reagieren weitere Empfänger ebenfalls auf die Nachricht, entsteht innerhalb kurzer Zeit eine regelrechte Nachrichtenlawine. Aus einer einzelnen E-Mail können dadurch dutzende, hunderte oder sogar tausende weitere Nachrichten entstehen.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a4e200bc811c&quot;}" data-wp-interactive="core/image" data-wp-key="6a4e200bc811c" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" width="1024" height="683" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail-storm-example-1024x683.png" alt="" class="wp-image-2705" srcset="https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail-storm-example-1024x683.png 1024w, https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail-storm-example-300x200.png 300w, https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail-storm-example-768x512.png 768w, https://maximiliankrieg.de/wp-content/uploads/2026/06/20260602_mail-storm-example.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Beispiel eines E-Mail-Sturms</figcaption></figure>



<h3 class="wp-block-heading">Ursachen und Symptome</h3>



<p class="wp-block-paragraph">In den meisten Fällen geschieht so ein Sturm unbeabsichtigt.</p>



<p class="wp-block-paragraph">Häufige Ursachen sind:</p>



<ul class="wp-block-list">
<li>Versehentliches Antworten an alle Empfänger</li>



<li>Fehlkonfigurierte Mailinglisten oder Verteiler</li>



<li>Import alter oder ungepflegter Verteilerlisten</li>



<li>Organisatorische Fehler bei der Nutzung von Verteilergruppen</li>



<li>Absichtlicher Missbrauch zur Störung oder Belästigung</li>
</ul>



<p class="wp-block-paragraph">Typischerweise erkennt man einen laufenden E-Mail-Sturm an einer Vielzahl von Antworten mit nahezu identischem Inhalt. </p>



<p class="wp-block-paragraph">Häufige Beispiele sind:</p>



<ul class="wp-block-list">
<li>„Bitte austragen“</li>



<li>„Warum bekomme ich diese E-Mail?“</li>



<li>„Hören Sie auf, mir E-Mails zu schicken“</li>
</ul>



<p class="wp-block-paragraph">Das eigentliche Problem besteht darin, dass jede dieser Antworten erneut an sämtliche Teilnehmer des Verteilers gesendet wird. Dadurch verstärken die Empfänger den Sturm unbeabsichtigt selbst.</p>



<h3 class="wp-block-heading">Eskalation durch automatische Systeme</h3>



<p class="wp-block-paragraph">Besonders problematisch wird es, wenn neben menschlichen Empfängern auch automatisierte Systeme auf die Nachricht reagieren. </p>



<p class="wp-block-paragraph">Dazu gehören beispielsweise:</p>



<ul class="wp-block-list">
<li>Automatische Abwesenheitsnotizen</li>



<li>Ticketsysteme</li>



<li>Monitoring- und Alarmierungssysteme</li>



<li>Weitere Mailinglisten oder Verteiler</li>



<li>Automatisierte Workflows und Benachrichtigungssysteme</li>
</ul>



<p class="wp-block-paragraph">Antworten solche Systeme ebenfalls an den Verteiler, kann sich die Anzahl der Nachrichten innerhalb kürzester Zeit vervielfachen. In ungünstigen Fällen entstehen dabei Endlosschleifen oder massive Mailfluten, die Postfächer, Mailserver und Helpdesks erheblich belasten können.</p>



<p class="wp-block-paragraph">Je größer der Verteiler und je mehr automatisierte Systeme beteiligt sind, desto schneller kann sich ein einzelner Fehler zu einem großflächigen E-Mail-Sturm entwickeln.</p>



<h3 class="wp-block-heading">Böswillig ausgelöste E-Mail-Stürme</h3>



<p class="wp-block-paragraph">Während die meisten E-Mail-Stürme unbeabsichtigt entstehen, können solche Situationen auch gezielt provoziert werden. In diesem Fall konnten wir klar davon ausgehen, dass es sich um absichtlichen Missbrauch handelt, da die E-Mail-Adresse von mir nur auf einer einzelnen Plattform verwendet wurde, welche vor längerer Zeit ein Datenleck hatte.</p>



<p class="wp-block-paragraph">Ziel und Zweck dieser Maßnahme könnten sein:</p>



<ul class="wp-block-list">
<li>Gezielte Belästigung von Personen oder Organisationen durch Nachrichtenfluten.</li>



<li>Störung des normalen E-Mail-Verkehrs und Überlastung von Systemen und Personen.</li>



<li>Analyse der aktiv genutzten E-Mail-Adressen durch Überwachung, wer darauf reagiert.</li>
</ul>



<h2 class="wp-block-heading">Maßnahmen zur Vermeidung</h2>



<p class="wp-block-paragraph">Sobald das oben genannte Problem erkannt wurde, sollte man möglichst wenig zur weiteren Eskalation beitragen. Daher ist es oberstes Ziel nicht selbst auf „Allen antworten“ klicken.</p>



<p class="wp-block-paragraph">Generell sind folgende Maßnahmen zielführend:</p>



<ul class="wp-block-list">
<li>Mailingliste blockieren</li>



<li>Filterregeln erstellen</li>



<li>Austragen</li>



<li>Spam melden</li>



<li>Administrator kontaktieren</li>
</ul>



<p class="wp-block-paragraph">Da es sich in diesem Fall um eine mutwillige Konfiguration der Liste handelt, ist es leider nicht hilfreich den Administrator zu kontaktieren oder Spam zu melden. Es bleibt daher nur der Weg sich manuell aus der Mailing-Liste auszutragen. Das Risiko, dass der Verursacher nun Kenntnis darüber hat, dass diese Mail-Adresse auch existiert, ist für mich tragbar in dem Fall.</p>



<p class="wp-block-paragraph">Daher senden wir eine E-Mail an die Unsubscribe-Adresse aus dem Attribut <code>List-Unsubscribe</code>. Der Inhalt der Nachricht ist in der Regel egal, oft reicht sogar eine leere E-Mail.</p>



<pre class="wp-block-code"><code>googlegroups-manage+3090089275+unsubscribe@googlegroups.com</code></pre>



<h2 class="wp-block-heading">Quellen</h2>



<ul class="wp-block-list">
<li><a href="https://en.wikipedia.org/wiki/Email_storm">wikipedia.org &#8211; Email storm</a></li>



<li><a href="https://mxtoolbox.com/EmailHeaders.aspx">mxtoolbox.com &#8211; Email Header Analyzer, RFC822 Parser</a></li>



<li><a href="https://www.twilio.com/en-us/blog/insights/list-unsubscribe">twilio.com &#8211; List-Unsubscribe Header: What It Is &amp; How to Use It | Twilio</a></li>
</ul>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2026/06/erkennung-und-vermeidung-eines-e-mail-sturms/">Erkennung und Vermeidung eines E-Mail-Sturms (User)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2026/06/erkennung-und-vermeidung-eines-e-mail-sturms/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Download von PDF-Dateien aus Viewer.js</title>
		<link>https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/</link>
					<comments>https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Sat, 01 Jun 2024 14:34:49 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[viewer.js]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=651</guid>

					<description><![CDATA[<p>Heute bin ich auf eine Webseite gestoßen, die ein für mich interessantes PDF in einem Online-PDF-Reader bereitstellt. Dieser Reader verfügt normalerweise über eine Download-Funktion, die&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/">Download von PDF-Dateien aus Viewer.js</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Heute bin ich auf eine Webseite gestoßen, die ein für mich interessantes PDF in einem Online-PDF-Reader bereitstellt. Dieser Reader verfügt normalerweise über eine Download-Funktion, die in diesem Fall jedoch durch spezifische Einstellungen im JavaScript-basierten Reader deaktiviert wurde. In diesem Artikel beschreibe ich einen Weg diese Blockierung zu umgehen.</p>



<p class="wp-block-paragraph">Ein direkter Download der Datei &#8222;mypdf.pdf&#8220; unter Angabe des Pfades ist nicht möglich, da dies vom Webserver scheinbar selbst unterbunden wird. Der Quellcode der Webseite lautet wie folgt:</p>



<pre class="wp-block-code"><code>&lt;head>
&lt;meta charset="utf-8">
&lt;meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
&lt;title>Title&lt;/title>
&lt;script src="pdf.viewer2.js">&lt;/script>
&lt;link href="//mydata.com/data/mypdf.pdf" rel="preconnect">
&lt;link href="//mydata.com/data/mypdf.pdf" rel="dns-prefetch">
&lt;/head></code></pre>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a4e200bc9f3c&quot;}" data-wp-interactive="core/image" data-wp-key="6a4e200bc9f3c" class="wp-block-image is-style-default wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="245" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny-1024x245.png" alt="" class="wp-image-655" srcset="https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny-1024x245.png 1024w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny-300x72.png 300w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny-768x184.png 768w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny.png 1144w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Download der PDF-Datei unter Angabe der URL ist unterbunden</figcaption></figure>



<p class="wp-block-paragraph">Nach kurzer Recherche im Internet fand ich den Hinweis, dass die relevanten Befehle des PDF-Readers in der Regel weiterhin vorhanden sind und daher direkt über die Konsole des Browsers gesteuert werden können. Dabei wird das für den Download relevante Klick-Event des ausgeblendeten Download-Buttons ausgelöst. Um dies zu erreichen, muss der folgende Befehl ausgeführt werden:</p>



<pre class="wp-block-code"><code>document.getElementById('download').click()</code></pre>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a4e200bca2e2&quot;}" data-wp-interactive="core/image" data-wp-key="6a4e200bca2e2" class="wp-block-image wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="183" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf-1024x183.png" alt="" class="wp-image-652" srcset="https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf-1024x183.png 1024w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf-300x54.png 300w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf-768x137.png 768w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf.png 1118w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Manuelle Aktivierung des Klicks auf dem Download-Button via Konsole</figcaption></figure>



<p class="wp-block-paragraph">Nach Ausführung des Befehls startet der Download der PDF-Datei. Es kann jedoch notwendig sein, wenn der PDF-Reader in einem iFrame eingebettet ist, dass die Webseite des iFrame vorher direkt aufgerufen werden muss.</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/">Download von PDF-Dateien aus Viewer.js</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Simple Stoppuhr mit JavaScript und HTML (V2)</title>
		<link>https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/</link>
					<comments>https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Sun, 19 Mar 2017 22:08:00 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=2419</guid>

					<description><![CDATA[<p>Auf die Rückfrage hin, ob ich die zuvor beschriebene Variante meiner&#160;simplen Stoppuhr&#160;noch weiter vereinfachen könnte, habe ich mich nochmal an den Code gesetzt und ihn&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/">Simple Stoppuhr mit JavaScript und HTML (V2)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Auf die Rückfrage hin, ob ich die zuvor beschriebene Variante meiner&nbsp;<a href="https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/" type="post" id="2427">simplen Stoppuhr</a>&nbsp;noch weiter vereinfachen könnte, habe ich mich nochmal an den Code gesetzt und ihn etwas modifiziert. Eine allgemeine und sinnvolle Änderung ist die Positionierung der Aktionsfelder über der eigentlichen Ausgabe. Anstatt die Knöpfe zu deaktivieren, werden sie nun ausgeblendet, wodurch der Mauszeiger auf seiner aktuellen Position verweilen kann. Weiterhin wird in der neuen Variante, wie angefragt, auf eine Restart-Funktion verzichtet. Der Code hierzu findet sich im Artikel.</p>



<h3 class="wp-block-heading">Ansicht der Stoppuhr</h3>



<p class="wp-block-paragraph">Wie in der folgenden Abbildung zu sehen ist, habe ich auf die Ausgabe der exakten Uhrzeit verzichtet, da diese primär zur Überprüfung in der vorherigen Variante genutzt wurde.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a4e200bcb0dd&quot;}" data-wp-interactive="core/image" data-wp-key="6a4e200bcb0dd" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="886" height="261" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2026/05/20170325-technik-stoppuhr.png" alt="" class="wp-image-2420" title="Darstellung der Zustände Start- und Stopp in der Stoppuhr" srcset="https://maximiliankrieg.de/wp-content/uploads/2026/05/20170325-technik-stoppuhr.png 886w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20170325-technik-stoppuhr-300x88.png 300w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20170325-technik-stoppuhr-768x226.png 768w" sizes="auto, (max-width: 886px) 100vw, 886px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Darstellung der Zustände Start- und Stopp in der Stoppuhr</figcaption></figure>



<p class="wp-block-paragraph">In Version 2 wird lediglich die summierte Zeit angezeigt und je nach aktuellem Zustand der zur Verfügung stehende Button.</p>



<h3 class="wp-block-heading">Programmcode</h3>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;title&gt;Stoppuhr&lt;/title&gt;
&lt;style&gt;
    .myWatch {
        border: 1px solid black;
        margin: 1rem;
        padding: 1rem;
        background-color: grey;
        width: 25rem
    }
&lt;/style&gt;

&lt;body&gt;
    &lt;script&gt;
        var runTime = 0;
        var startTime = 0;

        function addItem(varText) {
            var entry = document.createElement('li');
            entry.appendChild(document.createTextNode(varText));
            document.getElementById('myLog').appendChild(entry);
        }

        function init() {
            document.getElementById("btn_pause").style.display = "none";
        }

        function startWatch() {
            startTime = new Date();
            document.getElementById("btn_pause").style.display = 'block';
            document.getElementById("btn_start").style.display = 'none';
        }

        function pause() {
            runTime = runTime + new Date().getTime() - startTime.getTime();
            addItem("Laufzeit: " + runTime / 1000 + "s");
            document.getElementById("btn_start").style.display = 'block';
            document.getElementById("btn_pause").style.display = 'none';
        }
    &lt;/script&gt;
    &lt;div class="myWatch"&gt;
        &lt;h1&gt;Stoppuhr&lt;/h1&gt;
        &lt;input name="btn_start" id="btn_start" onclick="startWatch();" type="button" value="Start" /&gt;
        &lt;input name="btn_pause" id="btn_pause" onclick="pause();" type="button" value="Pause" /&gt;
        &lt;ol id="myLog"&gt;&lt;/ol&gt;
    &lt;/div&gt;
    &lt;script&gt;
        init();
    &lt;/script&gt;
&lt;/body&gt;

&lt;/html&gt;</code></pre>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/">Simple Stoppuhr mit JavaScript und HTML (V2)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Auslesen von HSTS-Informationen aus dem HTTP-Header</title>
		<link>https://maximiliankrieg.de/2016/10/auslesen-von-hsts-informationen-aus-dem-http-header/</link>
					<comments>https://maximiliankrieg.de/2016/10/auslesen-von-hsts-informationen-aus-dem-http-header/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Tue, 25 Oct 2016 19:53:00 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<category><![CDATA[hsts]]></category>
		<category><![CDATA[https]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1210</guid>

					<description><![CDATA[<p>In meinem Artikel&#160;HTTP Strict Transport Security (HSTS) für Lighttpd aktivieren&#160;habe ich beschrieben, was HSTS ist und wie man es auf seinem Webserver aktiviert, um eine&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2016/10/auslesen-von-hsts-informationen-aus-dem-http-header/">Auslesen von HSTS-Informationen aus dem HTTP-Header</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In meinem Artikel&nbsp;<a href="https://maximiliankrieg.de/2016/02/http-strict-transport-security-hsts-fuer-lighttpd-aktivieren/" type="post" id="1279">HTTP Strict Transport Security (HSTS) für Lighttpd aktivieren</a>&nbsp;habe ich beschrieben, was HSTS ist und wie man es auf seinem Webserver aktiviert, um eine bessere Bewertung beim SSL Server Test von Qualys zu erhalten. Nun trat der Fall auf, dass dieser Test für eine andere Webseite die Meldung&nbsp;<code>Invalid HSTS header</code>&nbsp;herausgegeben hat. Die Konfiguration auf dem betroffenen Webserver hat auf den ersten Blick allerdings korrekt ausgesehen. Wie man den HSTS-Header ausliest, um in einem solchen Fall das Troubleshooting zu betreiben, beschreibe ich in diesem Artikel.</p>



<h3 class="wp-block-heading">Symptom</h3>



<p class="wp-block-paragraph">Der SSL Server Test von Qualys berichtet nach der Konfiguration von HSTS, dass der HSTS-Header ungültig sei.</p>



<h3 class="wp-block-heading">Abrufen&nbsp;des HTTP-Headers mit cURL</h3>



<p class="wp-block-paragraph">Mithilfe des Kommandozeilenprogramms&nbsp;<code>cURL</code>&nbsp;kann man Dateien von oder zu einem Server zu übertragen. Ruft man es mit der Option&nbsp;<code>-I</code>&nbsp;auf, kann man damit unter anderem&nbsp;den HTTP-Header einer Webseite abrufen. Eine detailierte Beschreibung dieser Funktionalität liefert die Seite haxx.se:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">(HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature the command HEAD which this uses to get nothing but the header of a document. When used on an FTP or FILE file, curl displays the file size and last modification time only.https://curl.haxx.se/docs/manpage.html</p>
</blockquote>



<p class="wp-block-paragraph">Der Aufruf dieses Befehls liefert&nbsp;beispielsweise für meine Seite den folgenden Rückgabewert:</p>



<pre class="wp-block-code"><code>$ curl -I https://maximiliankrieg.de
HTTP/1.1 200 OK
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
X-Powered-By: PHP/5.5.9-1ubuntu4.19
Set-Cookie: 8b4cc86896af6ff21730a4c7eb47cfa6=gu5h8l90p4il834avfc9v95s23; path=/; secure; HttpOnly
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Content-Type: text/html; charset=utf-8
Expires: Wed, 17 Aug 2005 00:00:00 GMT
Last-Modified: Mon, 12 Sep 2016 10:33:17 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Date: Mon, 12 Sep 2016 10:33:17 GMT
Server: lighttpd/1.4.33</code></pre>



<p class="wp-block-paragraph">Die Zeile mit&nbsp;<code>Strict-Transport-Security</code>&nbsp;enthält die für uns interessanten Informationen. Möchte man sich ausschließlich diese Zeile anzeigen lassen, kann man mithilfe von&nbsp;<code>grep</code>&nbsp;den Rückgabewert nochmals durchsuchen und filtern. Der vollständige Befehl und der reduzierte&nbsp;Rückgabewert sehen wie folgt aus:</p>



<pre class="wp-block-code"><code>$ curl -s -D- https://maximiliankrieg.de | grep Strict
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload</code></pre>



<h3 class="wp-block-heading">Problem und Lösung</h3>



<p class="wp-block-paragraph">Der obenstehende Befehl wurde auf den betroffenen Webserver angewendet und hat dabei den Rückgabewert&nbsp;<code>Strict-Transport-Security: "max-age=63072000"</code>&nbsp;geliefert. Abweichend zu meinem Webserver sind&nbsp;Anführungszeichen um das Attribut&nbsp;<code>max-age</code>&nbsp;herum gesetzt. Nachdem wir die überflüssigen Anführungszeichen&nbsp;aus der Konfiguration entfernt haben, hat&nbsp;der SSL Server Test den Header korrekt eingelesen und hat schlussendlich in der Bewertung A+ resultiert.</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2016/10/auslesen-von-hsts-informationen-aus-dem-http-header/">Auslesen von HSTS-Informationen aus dem HTTP-Header</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2016/10/auslesen-von-hsts-informationen-aus-dem-http-header/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Reimport von .ova-Vorlagen in ESXi 6.0 schlägt fehl</title>
		<link>https://maximiliankrieg.de/2016/09/reimport-von-ova-vorlagen-in-esxi-6-0-schlaegt-fehl/</link>
					<comments>https://maximiliankrieg.de/2016/09/reimport-von-ova-vorlagen-in-esxi-6-0-schlaegt-fehl/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Tue, 27 Sep 2016 21:05:00 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<category><![CDATA[ESX]]></category>
		<category><![CDATA[VMware]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=2415</guid>

					<description><![CDATA[<p>Vor kurzem habe ich eine Firewall-Testumgebung mit verschiedenen, virtuellen Open Source-Firewalls aufgebaut, um deren Installationsroutinen, Konfigurationsmöglichkeiten und Funktionsumfang zu evaluieren. Nachdem ich meine Tests abgeschlossen&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2016/09/reimport-von-ova-vorlagen-in-esxi-6-0-schlaegt-fehl/">Reimport von .ova-Vorlagen in ESXi 6.0 schlägt fehl</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Vor kurzem habe ich eine Firewall-Testumgebung mit verschiedenen, virtuellen Open Source-Firewalls aufgebaut, um deren Installationsroutinen, Konfigurationsmöglichkeiten und Funktionsumfang zu evaluieren. Nachdem ich meine Tests abgeschlossen hatte, wollte ich die Firewalls exportieren, um den Speicher auf meinem ESXi 6.0-Host für andere Systeme bereitzustellen. Hierfür habe ich den Export als .ova-Vorlage gewählt.&nbsp;Als ich eine dieser Firewalls testweise reimportieren wollte, bin ich jedoch über die folgende Fehlermeldung gestoßen.</p>



<p class="wp-block-paragraph"><code>Failed to deploy OVF package: The task was canceled by a user.</code></p>



<p class="wp-block-paragraph">Auch eine wiederholte Initialisierung des Imports schlägt bei dieser Fehlermeldung konsequent fehl. In diesem Beitrag halte&nbsp;ich die notwendigen Schritte fest, um die exportierten Vorlagen&nbsp;importierbar zu machen.</p>



<h3 class="wp-block-heading">Anleitung</h3>



<p class="wp-block-paragraph">In dem&nbsp;Artikel&nbsp;<a href="https://lukebarklimore.wordpress.com/2012/10/25/esxi-5-1-fixing-failed-to-deploy-ovf-package-the-task-was-canceled-by-a-user/" target="_blank" rel="noreferrer noopener">ESXi 5.1 : Fixing ‘Failed to deploy OVF package: The task was canceled by a user.’</a>&nbsp;von&nbsp;Luke Barklimore wird die selbe&nbsp;Fehlermeldung vom ESXi 5.1 beschrieben und ein manueller Weg genannt diesen Fehler zu beheben. Ich habe mich im Anschluss&nbsp;an seine Anleitung gehalten und konnte im ESXi 6.0 meine zuvor exportierten Vorlagen erfolgreich reimportieren. Die folgenden sechs Schritte fassen die Maßnahmen zusammen, ohne auf die Ursache des Problems&nbsp;genauer einzugehen.</p>



<p class="wp-block-paragraph">Wie kann ich eine zuvor exportiere .ova-Datei im ESXi 6.0 reimportieren?</p>



<ol class="wp-block-list">
<li>Die .ova-Dateiendung in .tar umbenennen und das Archiv mit einem geeigneten Packprogramm, wie 7-Zip, entpacken</li>



<li>Es werden drei Dateien mit den Endungen .ovf, .vmdk und .mf extrahiert, wobei letztere gelöscht werden muss</li>



<li>Die .ovf-Datei mit einem Texteditor, wie Notepad oder Notepad++, öffnen, um in der folgenden Textzeile .iso durch .atapi zu ersetzen: <code>&lt;rasd:ResourceSubType>vmware.cdrom.iso&lt;/rasd:ResourceSubType></code></li>



<li>Die veränderte .ovf-Datei und die .vmdk-Datei müssen nun wieder in ein .tar-Archiv gepackt werden</li>



<li>Abschließend muss dieses mit der ursprünglichen .ova-Dateiendung versehen werden</li>



<li>Die .ova-Datei kann nun im ESXi 6.0 importiert werden</li>
</ol>



<p class="wp-block-paragraph">Vielen Dank an dieser Stelle an Luke Barklimore, der mir viel Mühe abgenommen hat, indem er sein Wissen geteilt hat!</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2016/09/reimport-von-ova-vorlagen-in-esxi-6-0-schlaegt-fehl/">Reimport von .ova-Vorlagen in ESXi 6.0 schlägt fehl</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2016/09/reimport-von-ova-vorlagen-in-esxi-6-0-schlaegt-fehl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Simple Stoppuhr mit JavaScript und HTML</title>
		<link>https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/</link>
					<comments>https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Wed, 13 Jan 2016 22:15:00 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=2427</guid>

					<description><![CDATA[<p>Vor einigen Tagen habe ich ein kleines JavaScript für ein Formular geschrieben, das zur Erfassung von Tätigkeitsdauern genutzt wird. Das Design und die Funktionsweise ist&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/">Simple Stoppuhr mit JavaScript und HTML</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Vor einigen Tagen habe ich ein kleines JavaScript für ein Formular geschrieben, das zur Erfassung von Tätigkeitsdauern genutzt wird. Das Design und die Funktionsweise ist sehr rudimentär gehalten, da keine genauen Anforderungen diesbezüglich spezifiziert wurden.</p>



<p class="wp-block-paragraph">Die folgende Abbildung zeigt die exemplarische Anwendung von Start, Pause, Start, Pause und Ende. Danach beschreibe ich die grundlegenden Ideen hinter meiner Implementierung und den vollständigen Code.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a4e200bcd843&quot;}" data-wp-interactive="core/image" data-wp-key="6a4e200bcd843" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="527" height="278" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-beispiel.png" alt="" class="wp-image-2428" title="Exemplarische Ausführung der Stoppuhr von Start bis Ende" srcset="https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-beispiel.png 527w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-beispiel-300x158.png 300w" sizes="auto, (max-width: 527px) 100vw, 527px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Exemplarische Ausführung der Stoppuhr von Start bis Ende</figcaption></figure>



<p class="wp-block-paragraph">Im folgenden Listing ist der vereinfachte HTML-Code und das entsprechende JavaScript aufgeführt. Mit einer Start-Pause-Funktion ist es möglich Unterbrechungen abzubilden. Die Steuerelemente werden dynamisch aktiviert und deaktiviert. Dies geschieht in Abhängigkeit der jeweiligen Zustände. Da das vordefinierte Formular ein paar technische Herausforderungen beinhaltet, habe ich mich gegen eine visuelle Repräsentation mit automatischer Aktualisierung entschieden. Stattdessen werden Zeitstempel gespeichert und angezeigt, um zeitliche Differenzen abzubilden.</p>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
   &lt;title&gt;Stoppuhr&lt;/title&gt;
   &lt;body&gt;
      &lt;script&gt;
         function addItem(varText) {
            var entry = document.createElement('li');
            entry.appendChild(document.createTextNode(varText));
            document.getElementById('myLog').appendChild(entry);
         }

         function disableButtons(bStart, bPause, bEnd, bRestart) {
            document.getElementById("btn_start").disabled = bStart;
            document.getElementById("btn_pause").disabled = bPause;
            document.getElementById("btn_end").disabled = bEnd;
            document.getElementById("btn_restart").disabled = bRestart;
         }

         function restart() {
            runTime = 0;
            start();
         }

         function start() {
            startTime = new Date();
            addItem("Start:" + new Date());
            disableButtons(true, false, false, true);
			runState = 0;
         }

         function pause() {
			
            runTime = runTime + new Date().getTime() - startTime.getTime();
            addItem("Pause: " + new Date());
            addItem("Laufzeit: " + runTime / 1000 + "s");
            disableButtons(false, true, false, true);
			runState = 1;
         }

         function end() {
		    if (runState==0){
               runTime = runTime + new Date().getTime() - startTime.getTime()};
			
			if (runState==1){
			   //
			}
			   
            addItem("Ende: " + new Date());
            addItem("Laufzeit: " + runTime / 1000 + "s bzw. " + runTime / 60000 + "m");
            addItem("Aufgerundet: " + Math.ceil(runTime / 60000) + "m");
            disableButtons(true, true, true, false);
			runState=2;
         }
      &lt;/script&gt;
      &lt;h1&gt;Laufzeit&lt;/h1&gt;
      &lt;ol id="myLog"&gt;&lt;/ol&gt;
      &lt;input name="btn_start" id="btn_start" onclick="start();" type="button" value="Start" /&gt;
      &lt;input name="btn_pause" id="btn_pause" onclick="pause();" type="button" value="Pause" /&gt;
      &lt;input name="btn_end" id="btn_end" onclick="end();" type="button" value="Ende" /&gt;
      &lt;input name="btn_restart" id="btn_restart" onclick="restart();" type="button" value="Restart" /&gt;
      &lt;script&gt;
         var runTime;
         var startTime;
         var runState;
         restart();
      &lt;/script&gt;
   &lt;/body&gt;
&lt;/html&gt;</code></pre>



<p class="wp-block-paragraph">Die folgende Abbildung zeigt die definierten Zustände meiner Stoppuhr. An dieser Stelle ist zu sagen, dass die Implementierung der Funktionen sicherlich besser machbar ist, aber für die definierten Anforderungen ausreichend ist.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a4e200bcdc07&quot;}" data-wp-interactive="core/image" data-wp-key="6a4e200bcdc07" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="373" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende-1024x373.png" alt="" class="wp-image-2429" title="Zustandswechsel beschrieben anhand der JavaScript-Funktionen" srcset="https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende-1024x373.png 1024w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende-300x109.png 300w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende-768x280.png 768w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende.png 1139w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Zustandswechsel beschrieben anhand der JavaScript-Funktionen</figcaption></figure>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/">Simple Stoppuhr mit JavaScript und HTML</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Priorität und Gewichtung bei Service Resource Records</title>
		<link>https://maximiliankrieg.de/2015/11/prioritaet-und-gewichtung-bei-service-resource-records/</link>
					<comments>https://maximiliankrieg.de/2015/11/prioritaet-und-gewichtung-bei-service-resource-records/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Tue, 10 Nov 2015 20:54:00 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<category><![CDATA[dns]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1212</guid>

					<description><![CDATA[<p>In&#160;Resource Records&#160;werden die Informationen des&#160;Domain Name System (DNS)&#160;hinterlegt. Ein&#160;SRV (Service) Resource Record&#160;enthält die Informationen zu den bereitgestellten IP-Diensten einer Domain. Ein Dienst kann einen oder&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2015/11/prioritaet-und-gewichtung-bei-service-resource-records/">Priorität und Gewichtung bei Service Resource Records</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In&nbsp;<em>Resource Records</em>&nbsp;werden die Informationen des&nbsp;<em>Domain Name System (DNS)</em>&nbsp;hinterlegt. Ein&nbsp;<em>SRV (Service) Resource Record</em>&nbsp;enthält die Informationen zu den bereitgestellten IP-Diensten einer Domain. Ein Dienst kann einen oder mehrere Einträge besitzen, wenn mehrere Systeme diesen Dienst bereitstellen. Hierbei kommen die Parameter&nbsp;<em>Priorität</em>&nbsp;und&nbsp;<em>Gewicht</em>&nbsp;zum Einsatz.</p>



<h3 class="wp-block-heading">Kurzbeschreibung</h3>



<p class="wp-block-paragraph">Was ist der Unterschied?</p>



<p class="wp-block-paragraph">Die&nbsp;<em>Priorität</em>&nbsp;ist ein ganzzahliger Wert zwischen 0 und 65535. Je niedriger der Wert, desto höher ist die Priorität. Wenn mehrere Hosts den selben Dienst anbieten, entscheidet die Priorität, welcher Host an die DNS-Clients zurückgegeben wird. Das Gewicht ist ebenfalls ein ganzzahliger Wert in gleichen&nbsp;Wertebereich. Im Gegensatz dazu dient das Gewicht aber der Lastverteilung zwischen Hosts mit gleicher Priorität. Hat ein Dienst-Host das Gewicht 3 und ein zweiter Host das Gewicht 2, so wird durchschnittlich der erste Host mit einer Wahrscheinlichkeit von&nbsp;\(\frac{3}{(2+3)} = \frac{3}{5} = 60\%\)&nbsp;genutzt.</p>



<h3 class="wp-block-heading">Detailierte Beschreibung</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Priorität:</strong>&nbsp;Eine Zahl zwischen 0 und 65535, die die Priorität dieses Eintrags für den Host angibt, der unter Host, der diesen Dienst anbietet angegeben ist.</p>



<p class="wp-block-paragraph">Priorität gibt die Priorität dieses Hosts in Bezug auf die anderen Hosts in dieser Domäne an, die denselben Dienst anbieten und durch andere Dienstidentifizierungs-Ressourceneinträge (SRV) angegeben werden. Niedrigere Zahlen bedeuten eine höhere Priorität. Die höchste Priorität hat ein Host (der den im Eintrag angegebenen Dienst bereitstellt) mit einer Priorität von 0.</p>



<p class="wp-block-paragraph">Wenn für einen Dienst mehrere Dienstidentifizierungs-Ressourceneinträge (SRV) vorhanden sind, wird zuerst der Host mit der niedrigsten Prioritätszahl an die DNS-Clients (Domain Name System) weitergegeben. Wenn dieser Host fehlschlägt oder nicht erreichbar ist, wird der im SRV-Eintrag angegebene Host mit der nächsthöheren Prioritätszahl verwendet.</p>



<p class="wp-block-paragraph">Wenn zwei oder mehrere Hosts im Dienstidentifizierungs-Ressourceneintrag (SRV) für einen bestimmten Dienst dieselbe Prioritätszahl aufweisen, können die DNS-Clients diese Hosts in zufälliger Reihenfolge verwenden.https://technet.microsoft.com/de-de/library/cc742513.aspx</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Gewichtung:</strong>&nbsp;Eine Zahl zwischen 1 und 65535, die als Lastenausgleichsverfahren verwendet wird. Wenn mehrere Ziel-SRV-Hosts für den Diensttyp zur Auswahl stehen (angegeben unter Dienst), die denselben Wert für Priorität aufweisen, können Sie diese Feld verwenden, um eine Gewichtung für bestimmte Hosts anzugeben. Wenn mehrere Hosts über dieselbe Priorität verfügen, werden die im SRV-Eintrag angegebenen Hosts, die einen höheren Gewichtungswert aufweisen (wird hier eingegeben), als erstes an die Auflösungsclients in SRV-Abfrageergebnissen zurückgegeben.</p>



<p class="wp-block-paragraph">Verwenden Sie den Wert 0 (keine Gewichtung), wenn kein Lastenausgleich erforderlich ist. Dadurch wird die Verarbeitungszeit für SRV-Abfragen verkürzt, und die SRV-Ressourceneinträge sind leichter lesbar.https://technet.microsoft.com/de-de/library/cc742513.aspx</p>
</blockquote>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2015/11/prioritaet-und-gewichtung-bei-service-resource-records/">Priorität und Gewichtung bei Service Resource Records</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2015/11/prioritaet-und-gewichtung-bei-service-resource-records/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
