<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Dinge, die die Welt nicht braucht</title>
    <link>http://blog.planet-uwe.de/</link>
    <description>Uninteressantes zusammengewürfelt</description>
    <dc:language>de</dc:language>
    <admin:errorReportsTo rdf:resource="mailto:" />
    <generator>Serendipity 1.6 - http://www.s9y.org/</generator>
    
    <image>
        <url>http://blog.planet-uwe.de/templates/bulletproof/img/s9y_banner_small.png</url>
        <title>RSS: Dinge, die die Welt nicht braucht - Uninteressantes zusammengewürfelt</title>
        <link>http://blog.planet-uwe.de/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Überwachung von DNS Abfragen</title>
    <link>http://blog.planet-uwe.de/archives/101-UEberwachung-von-DNS-Abfragen.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/101-UEberwachung-von-DNS-Abfragen.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=101</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=101</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Um einem kleinen DNS Problem auf die Schliche zu kommen habe ich mit dem dem Framework Scapy ein kleines DNS Überwachungsscript zusammengehackt. Ist mehr oder weniger eine prä Alpha aber vielleicht kann es jemand gebrauchen :)&lt;br /&gt;
&lt;br /&gt;
(das Syntax Highlighting Plugin für des Blog ist neu. Sollte es den Code irgendwie unbrauchbar machen, bitte kurze Meldung. Danke)&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;
#!/usr/bin/python
from scapy.all import *
from time import time
from scapy.layers.dns import dnstypes



# REQ = request, ANS = answer, NX = not found

dnsdict= {}

def dnsin(x):
        dnsdata=x.getlayer(&quot;DNS&quot;)
        try:
                dnsdata.an
        except AttributeError:
                return &quot;ERROR no query data found in packet. Skipping...&quot;
        if (dnsdata.an == None):
                if (dnsdata.ns == None):
                        print &quot;REQ\t%i -&gt; %s&quot; % (dnsdata.id,dnsdata.qd.qname )
                        if (dnsdict.has_key(dnsdata.id)):
                                print &quot;ERROR id %i is an orphan. Overwrting...&quot; % dnsdata.id
                        dnsdict[dnsdata.id] = time()
                else:
                        print &quot;NX \t%i -&gt; %s&quot; % (dnsdata.id,dnsdata.qd.qname )
                        if (dnsdict.has_key(dnsdata.id)):
                                print &quot;### NX  %f seconds -&gt; %s (%i/%s)&quot; % (time()-dnsdict.pop(dnsdata.id), dnsdata.qd.qname,dnsdata.id, dnstypes[dnsdata.qd.qtype])
                        else:
                                print &quot;ERROR request for id %i (%s) not found. Skipping...&quot; % (dnsdata.id,dnsdata.qd.qname)
        else:
                print &quot;ANS\t%i -&gt; %s&quot; % (dnsdata.id,dnsdata.qd.qname )
                if (dnsdict.has_key(dnsdata.id)):
                        print &quot;### ANS %f seconds -&gt; %s (%i/%s)&quot; % (time()-dnsdict.pop(dnsdata.id), dnsdata.qd.qname,dnsdata.id, dnstypes[dnsdata.qd.qtype])
                else:   
                        print &quot;ERROR request for id %i (%s) not found. Skipping...&quot; % (dnsdata.id,dnsdata.qd)


sniff(filter=&quot;port 53&quot;,prn=lambda x: dnsin(x),count=0)

&lt;/pre&gt;&lt;br /&gt;
&lt;!-- &lt;/textarea&gt; --&gt; 
    </content:encoded>

    <pubDate>Sat, 07 Apr 2012 17:52:37 +0200</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/101-guid.html</guid>
    <category>dns</category>
<category>linux</category>
<category>python</category>
<category>scapy</category>

</item>
<item>
    <title>NMAP und IPv6 scanning</title>
    <link>http://blog.planet-uwe.de/archives/100-NMAP-und-IPv6-scanning.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/100-NMAP-und-IPv6-scanning.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=100</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=100</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Frisch aufgesetzte Firewalls/Paketfilter sollte man immer auch auf Wirksamkeit testen. Das Tool nmap ist oft das Mittel der Wahl um einen Portscan durchzuführen. Ein erster Lauf auf ein neu aufgesetztes Linux endete aber unerwartet:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
maninthemiddle ~ # nmap -6 2001:db8::5

Starting Nmap 5.51 ( http://nmap.org ) at 2012-04-06 23:15 CEST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.06 seconds
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Da ICMP6 bei IPv6 eine wichtige Rolle spielt sollte es auch nicht gefiltert werden. Folgende ip6tables Regel war eingetragen und sollte dies bewerkstelligen:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
ip6tables -A INPUT  -p icmpv6 -j ACCEPT
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Ein kurzer Test bestätigte auch, dass die Regel greift:&lt;br /&gt;
&lt;pre&gt;
maninthemiddle ~ # ping6 -c1 2001:db8::5
PING 2001:db8::5(2001:db8::5) 56 data bytes
64 bytes from 2001:db8::5: icmp_seq=1 ttl=58 time=17.1 ms

--- 2001:db8::5 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 17.118/17.118/17.118/0.000 ms
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Warum also glaubt nmap, dass der Host down ist. Ein tcpdump enthüllt die Vorgehensweise von nmap&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
# tcpdump -ni eth0 ip6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
23:07:23.572046 IP6 2001:db8::7.44131 &gt; 2001:db8::5.80: Flags [S], seq 3558174015, win 5760, options [mss 1440,sackOK,TS val 2940686631 ecr 0,nop,wscale 6], length 0
23:07:23.572305 IP6 2001:db8::7.45053 &gt; 2001:db8::5.443: Flags [S], seq 3564825844, win 5760, options [mss 1440,sackOK,TS val 2940686631 ecr 0,nop,wscale 6], length 0
23:07:25.572913 IP6 2001:db8::7.44134 &gt; 2001:db8::5.80: Flags [S], seq 1277830368, win 5760, options [mss 1440,sackOK,TS val 2940686831 ecr 0,nop,wscale 6], length 0
23:07:25.573181 IP6 2001:db8::7.45054 &gt; 2001:db8::5.443: Flags [S], seq 1263904517, win 5760, options [mss 1440,sackOK,TS val 2940686831 ecr 0,nop,wscale 6], length 0
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Bei IPv6 prüft nmap also nur TCP Port 80 und TCP Port 443 auf Erreichbarkeit (also implizit den Parameter -PS80,443). Nicht so bei IPv4 - hier benutzt nmap auch ICMP:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
# tcpdump -ni eth0 host 192.0.2.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:40:34.656542 IP 192.0.2.5 &gt; 192.0.2.1: ICMP echo request, id 61369, seq 0, length 8
23:40:34.656697 IP 192.0.2.5.48001 &gt; 192.0.2.1.443: S 740198195:740198195(0) win 2048 &lt;mss 1460&gt;
23:40:34.656760 IP 192.0.2.5.48001 &gt; 192.0.2.1.80: . ack 740198195 win 3072
23:40:34.656806 IP 192.0.2.5 &gt; 192.0.2.1: ICMP time stamp query id 51300 seq 0, length 20
23:40:36.658644 IP 192.0.2.5 &gt; 192.0.2.1: ICMP time stamp query id 47887 seq 0, length 20
23:40:36.658684 IP 192.0.2.5.48002 &gt; 192.0.2.1.80: . ack 740263730 win 1024
23:40:36.658706 IP 192.0.2.5.48002 &gt; 192.0.2.1.443: S 740263730:740263730(0) win 1024 &lt;mss 1460&gt;
23:40:36.658726 IP 192.0.2.5 &gt; 192.0.2.1: ICMP echo request, id 37760, seq 0, length 8
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Bei IPv4 ist der implizite Standard also  -PS80,443 -PE -PP.  Allerdings handelt es sich hierbei nicht um unterschiedliche Defaults sondern schlicht und einfach wieder um eine fehlende Implementation. Ein erzwungener alive check per ICMP mit dem Parameter -PE führt zur Fehlermeldung.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
# nmap -6 2001:db8::5 -PE
ICMP Echo, Timestamp and Address Mask pings are only valid for IPv4.
QUITTING!
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Man sollte sich also -Pn merken um den Alive Check zu umgehen. Wieder eine unerwartete Klippe die es bei IPv6 zu umschiffen gilt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 06 Apr 2012 23:09:34 +0200</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/100-guid.html</guid>
    <category>linux ipv6</category>

</item>
<item>
    <title>IPv6 auf Cisco WS-C3560</title>
    <link>http://blog.planet-uwe.de/archives/99-IPv6-auf-Cisco-WS-C3560.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/99-IPv6-auf-Cisco-WS-C3560.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=99</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=99</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Ciscos Switch WS-C3560 kann, sofern man die entsprechende Lizenz hat und dann das richtige Image verwendet, &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=726&amp;amp;entry_id=99&quot; title=&quot;http://www.cisco.com/en/US/prod/collateral/switches/ps5718/ps5528/product_data_sheet09186a00801f3d7d.html#wp9000894&quot;  onmouseover=&quot;window.status=&#039;http://www.cisco.com/en/US/prod/collateral/switches/ps5718/ps5528/product_data_sheet09186a00801f3d7d.html#wp9000894&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;tatsächlich IPv6 Routing in Hardware&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
The IP Services license provides a richer set of enterprise-class features, including advanced hardware-based IPv6 unicast and IPv6 Multicast routing as well as policy-based routing (PBR).&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Mein erster Versuch das die Geschichte mit ipv6 unicast-routing zu aktivieren verlief trotz richtigem Image allerdings überraschend:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Switch(config)#ipv6 ?&lt;br /&gt;
% Unrecognized command&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Damit IPv6 auf dieser Plattform wirklich funktioniert muss neben dem Image auch das &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=727&amp;amp;entry_id=99&quot; title=&quot;http://www.cisco.com/en/US/products/hw/switches/ps646/products_tech_note09186a0080094bc6.shtml&quot;  onmouseover=&quot;window.status=&#039;http://www.cisco.com/en/US/products/hw/switches/ps646/products_tech_note09186a0080094bc6.shtml&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;SDM Profil&lt;/a&gt; stimmen. Auf meinem Switch war dies noch auf IPv4 eingestellt:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Switch#show sdm prefer &lt;br /&gt;
 The current template is &quot;desktop default&quot; template.&lt;br /&gt;
 The selected template optimizes the resources in&lt;br /&gt;
 the switch to support this level of features for&lt;br /&gt;
 8 routed interfaces and 1024 VLANs. &lt;br /&gt;
&lt;br /&gt;
  number of unicast mac addresses:                  6K&lt;br /&gt;
  number of IPv4 IGMP groups + multicast routes:    1K&lt;br /&gt;
  number of IPv4 unicast routes:                    8K&lt;br /&gt;
    number of directly-connected IPv4 hosts:        6K&lt;br /&gt;
    number of indirect IPv4 routes:                 2K&lt;br /&gt;
  number of IPv4 policy based routing aces:         0&lt;br /&gt;
  number of IPv4/MAC qos aces:                      0.5K&lt;br /&gt;
  number of IPv4/MAC security aces:                 1K&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Switch#conf t&lt;br /&gt;
Enter configuration commands, one per line.  End with CNTL/Z.&lt;br /&gt;
&lt;br /&gt;
Switch(config)#sdm prefer dual-ipv4-and-ipv6 routing&lt;br /&gt;
Changes to the running SDM preferences have been stored, but cannot take effect &lt;br /&gt;
until the next reload.&lt;br /&gt;
Use &#039;show sdm prefer&#039; to see what SDM preference is currently active.&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem reboot taucht auch IPv6 auf&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Switch#show sdm prefer&lt;br /&gt;
 The current template is &quot;desktop IPv4 and IPv6 routing&quot; template.&lt;br /&gt;
 The selected template optimizes the resources in&lt;br /&gt;
 the switch to support this level of features for&lt;br /&gt;
 8 routed interfaces and 1024 VLANs. &lt;br /&gt;
&lt;br /&gt;
  number of unicast mac addresses:                  1.5K&lt;br /&gt;
  number of IPv4 IGMP groups + multicast routes:    1K&lt;br /&gt;
  number of IPv4 unicast routes:                    2.75K&lt;br /&gt;
    number of directly-connected IPv4 hosts:        1.5K&lt;br /&gt;
    number of indirect IPv4 routes:                 1.25K&lt;br /&gt;
  number of IPv6 multicast groups:                  1.125k&lt;br /&gt;
  number of directly-connected IPv6 addresses:      1.5K&lt;br /&gt;
  number of indirect IPv6 unicast routes:           1.25K&lt;br /&gt;
  number of IPv4 policy based routing aces:         0.25K&lt;br /&gt;
  number of IPv4/MAC qos aces:                      0.5K&lt;br /&gt;
  number of IPv4/MAC security aces:                 0.5K&lt;br /&gt;
  number of IPv6 policy based routing aces:         0.25K&lt;br /&gt;
  number of IPv6 qos aces:                          0.625k&lt;br /&gt;
  number of IPv6 security aces:                     0.5K&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und kann konfiguriert werden:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Switch(config)#ipv6 unicast-routing &lt;br /&gt;
Switch(config)#&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 15 Feb 2012 16:08:46 +0100</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/99-guid.html</guid>
    <category>cisco</category>
<category>ios</category>
<category>ipv6</category>

</item>
<item>
    <title>Länge von Dateinamen ermitteln</title>
    <link>http://blog.planet-uwe.de/archives/98-Laenge-von-Dateinamen-ermitteln.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/98-Laenge-von-Dateinamen-ermitteln.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=98</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=98</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Da ich gerade die Länge von Dateinamen herausfinden musste und mir nicht eingefallen ist wie man das elegant und schnell lösen könnte hab ich mir in der Shell eben was zusammengehackt. Vielleicht weiß jemand eine bessere Lösung:&lt;br /&gt;
&lt;br /&gt;
&lt;verbatim&gt;&lt;br /&gt;
for i in `ls -1`; do  echo -n &quot;$i:&quot; ;echo $i |wc -m  ; done | awk -F&#039;:&#039; &#039;{print $2 &quot;:&quot; $1}&#039; | sort -n&lt;br /&gt;
&lt;/verbatim&gt; 
    </content:encoded>

    <pubDate>Thu, 19 Jan 2012 12:29:06 +0100</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/98-guid.html</guid>
    <category>awk</category>
<category>bash</category>
<category>linux</category>

</item>
<item>
    <title>SSH über IPv6</title>
    <link>http://blog.planet-uwe.de/archives/97-SSH-ueber-IPv6.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/97-SSH-ueber-IPv6.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=97</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=97</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Eine Änderung von IPv6 gegenüber IP4 besteht darin, dass per Voreinstellung jeder Teilnehmer eines Netzes immer eine sogenannte Link-Local Adresse besitzt. Dieser &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=724&amp;amp;entry_id=97&quot; title=&quot;http://en.wikipedia.org/wiki/IPv6_stateless_address_autoconfiguration#Stateless_address_autoconfiguration&quot;  onmouseover=&quot;window.status=&#039;http://en.wikipedia.org/wiki/IPv6_stateless_address_autoconfiguration#Stateless_address_autoconfiguration&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;SLAAC (Stateless Address Autoconfiguration)&lt;/a&gt; genannte Automatismus ersetzt und erweitert das von IPv4 bekannte &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=725&amp;amp;entry_id=97&quot; title=&quot;http://en.wikipedia.org/wiki/Zeroconf&quot;  onmouseover=&quot;window.status=&#039;http://en.wikipedia.org/wiki/Zeroconf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Zeroconf&lt;/a&gt;. Während Zeroconf immer durch zusätzliche Software implementiert wird, ist SLAAC Bestandteil des IPv6 Stacks. Das heißt: ist auf einem Host IPv6 aktiviert, so hat dieser auch immer ein IP Adresse auf die zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Eine Besonderheit ist dabei, dass der Link-Local Adressraum aus dem die IPs vergeben werden (fe80::/10) auf jedem Interface anliegt und man daher immer das Interface angeben muss auf dem man eine solche IP erreichen will. Dem Kommando ping6 wird das Interface mit -I übergeben:&lt;br /&gt;
&lt;code&gt;
krusty ~ # ping6 -c1 fe80::20a:e4ff:fe3a:cda9
connect: Invalid argument
krusty ~ # ping6 -I eth0 -c1 fe80::20a:e4ff:fe3a:cda9
PING fe80::20a:e4ff:fe3a:cda9(fe80::20a:e4ff:fe3a:cda9) from fe80::20a:e4ff:fe3a:1dc9 eth0: 56 data bytes
64 bytes from fe80::20a:e4ff:fe3a:cda9: icmp_seq=1 ttl=64 time=0.042 ms

--- fe80::20a:e4ff:fe3a:cda9 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.042/0.042/0.042/0.000 ms

&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der ssh client bietet nun leider keinen solchen (offensichtlichen) Parameter. Hier wird das Interface direkt an die Adresse, getrennt von einem Prozentzeichen angehängt:&lt;br /&gt;
&lt;code&gt;
uwe@krusty ~ $ ssh fe80::20a:e4ff:fe3a:cda9%eth0
Last login: Sun Aug 14 16:04:38 CEST 2011 from fe80::20a:e4ff:fe3a:cda9%eth0 on pts/5
uwe@krusty ~ $ 
&lt;/code&gt; 
    </content:encoded>

    <pubDate>Sun, 14 Aug 2011 16:05:16 +0200</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/97-guid.html</guid>
    <category>ipv6</category>
<category>linux</category>
<category>ssh</category>

</item>
<item>
    <title>Logitech Webcam C250 eingerichtet</title>
    <link>http://blog.planet-uwe.de/archives/94-Logitech-Webcam-C250-eingerichtet.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/94-Logitech-Webcam-C250-eingerichtet.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=94</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=94</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Nur ein kurzer Eintrag als Gedächtnisstütze wie die Logitech Webcam C250 unter Gentoo zum funktionieren zu bewegen ist. Folgende Kernel-Einstellungen (2.6.34 in diesem Fall, bei anderen Kerneln kann der Pfad unter Umständen ein wenig anders sein) sind vonnöten:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
Device Drivers  ---&gt;
  Multimedia support  ---&gt;
    Video capture adapters ---&gt;
      V4L USB devices  ---&gt;
        USB Video Class (UVC)
Sound card support  ---&gt;
  Advanced Linux Sound Architecture  ---&gt;
    USB sound devices  ---&gt;
      USB Audio/MIDI driver
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Diese Optionen als Modul konfiguriert und mit &lt;strong&gt;make ; make modules_install&lt;/strong&gt; gebaut und udev sollte nach dem Anschluss der Webcam alles automagisch laden. Mit media-video/guvcview sollte dann bereits alles funktionieren. Die C250 bringt zwar ein Mikrofon mit, allerdings hat die schon vorhandene Soundkarte üblicherweise eine niedrigere Device Nummer in ALSA (und damit eine höhere Priorität) und ist damit das Standardgerät.  Somit müsste in jedem Programm in dem man das Mikrofon der C250 benutzen will extra konfigurieren.  Es ist jedoch auch möglich in ALSA verschiedene Standardgeräte für Wiedergabe und Aufnahme zu definieren. Dies kann entweder Global in der /etc/asound.conf oder für den entsprechenden Benutzer in der ~/.asoundrc geschehen. Zunächst muss man herausfinden welches Gerät welche Nummer hat:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
$ cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xf3ff8000 irq 22
 1 [NVidia         ]: HDA-Intel - HDA NVidia
                      HDA NVidia at 0xf7cfc000 irq 17
 2 [U0x46d0x804    ]: USB-Audio - USB Device 0x46d:0x804
                      USB Device 0x46d:0x804 at usb-0000:00:1d.0-1.5.1, high speed
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Mein Onboard Sound hat demnach Nummer 0 und die Webcam Nummer 2. Mit diesen Infos kann die ALSA Konfigurationsdatei schon korrekt angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
pcm.!default {
         type asym
         playback.pcm {
                 type plug
                 slave.pcm &quot;hw:0,0&quot;
         }  
         capture.pcm {
                 type plug
                 slave.pcm &quot;hw:2,0&quot;
         }  
 }
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Sollten die entsprechenden Geräte andere Nummern haben muss die Zahl hinter hw: natürlich angepasst werden. Es geht garantiert einfacher, eleganter und schöner mit ALSA, allerdings bin ich mit der Konfiguration nie wirklich grün geworden und das da oben &quot;works for me&quot; :)&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 22 Nov 2010 23:04:13 +0100</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/94-guid.html</guid>
    <category>c250</category>
<category>gentoo</category>
<category>linux</category>
<category>logitech</category>
<category>webcam</category>

</item>
<item>
    <title>Ausgelockt</title>
    <link>http://blog.planet-uwe.de/archives/93-Ausgelockt.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/93-Ausgelockt.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=93</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=93</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Ich kenne bisher niemanden der auf die Frage &quot;Hast du Capslock/die Feststelltaste schonmal gebraucht?&quot; mit ja geantwortet hätte. Bei der Anschlussfrage, ob Capslock schon einmal genervt hat antworteten bisher auch alle überinstimmend mit &quot;Ja&quot;.&lt;br /&gt;
&lt;br /&gt;
Grund genug dieses Ungetüm aus der grauen Schreibmaschienenvorzeit auf den digitalen Friedhof zu verbannen. Das Projekt &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=723&amp;amp;entry_id=93&quot; title=&quot;http://capsoff.org/&quot;  onmouseover=&quot;window.status=&#039;http://capsoff.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;CAPSoff&lt;/a&gt; hat sich der endgültigen Lösung des Problems verschrieben, ich möchte jedoch die &quot;softe&quot; Variante und Linux vorstellen. Die meisten Beschreibungen zu dieser Taste im Netz schalten sie komplett ab. Dabei wird jedoch übersehen, dass man meistens durchaus einen Tastendruck beabsichtigt hatte und eine der Tasten in umittelbarer Umgebung (Tab, A und Shift) erwischen wollte. Bindet man nun auf Capslock A oder Tab, so muss man das zusätzliche Zeichen bei einem Vertipper wieder löschen/die Aktion rückgängig machen. Bindet man jedoch Shift passiert bei einem Vertipper gar nichts. Aus diesem diesem Grund habe ich mich dazu entschlossen Capslock mit Shift zu belegen. Lange Vorrede, kurze Lösung:&lt;br /&gt;
&lt;br /&gt;
Zunächst muss eine Datei (bei mir $HOME/.Xmodmap) mit folgendem Inhalt erzeugt werden:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
clear Lock&lt;br /&gt;
add shift = Caps_Lock&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Diese kann dann einfach mit einem &lt;strong&gt;xmodmap $HOME/.xmodmap&lt;/strong&gt; geladen werden. Um dies Automatisch bei der KDE Ameldung auzuführen habe ich die Datei $HOME/.kde/Autostart/xmodmap erstellt:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
xmodmap $HOME/.Xmodmap&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Noch mit &lt;strong&gt;chmod 755 $HOME/.kde/Autostart/xmodmap&lt;/strong&gt; ausführbar machen und Capslock sollte nie wieder Probleme verursachen.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 21 Apr 2010 10:32:32 +0200</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/93-guid.html</guid>
    <category>capslock</category>
<category>kde</category>
<category>linux</category>
<category>xmodmap</category>

</item>
<item>
    <title>Gleichtakt</title>
    <link>http://blog.planet-uwe.de/archives/82-Gleichtakt.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/82-Gleichtakt.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=82</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=82</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Um die Uhrzeit unter Linux mit der &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=719&amp;amp;entry_id=82&quot; title=&quot;http://de.wikipedia.org/wiki/Koordinierte_Weltzeit&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Koordinierte_Weltzeit&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Koordinierten Weltzeit&lt;/a&gt; (UTC) synchron zu halten sollte &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=720&amp;amp;entry_id=82&quot; title=&quot;http://de.wikipedia.org/wiki/Network_Time_Protocol&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Network_Time_Protocol&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;NTP&lt;/a&gt; als standardisierte und offenes Protokoll benutzt wurden. Hierbei stehen einige Programme zur Auswahl, welche unterschiedliche Strategien zum Abgleich verfolgen. Das einfachste in dieser Katagorie ist sicher ntpdate, welches einen Server nach der aktuellen Uhrzeit befragt und diese hart im System setzt. Dieses Vorgehensweise übergeht jedoch Daemons wie z.B. cron und so können geplante Backups schlicht &quot;vergessen&quot; werden. Auch wenn man gerade am Rechner arbeitet kann eine plötzliche Veränderung der Zeit den Bildschirmschoner anspringen lassen.&lt;br /&gt;
&lt;br /&gt;
Auch aus diesen Gründen sollte dem ntpd als Standardimplementation der Vorzug gegeben werden. Dieser gleicht Gangdifferenzen zur korrekten Uhrzeit durch Beschleunigung bzw. Verlangsamung der lokalen Systemuhr aus. Stimmt die Zeit wieder, stellt der Daemon die richtige Geschwindigkeit her. Die oben angeführten Nachteile von ntpdate sind damit schon einmal umschifft. Natürlich bringt das eine etwas aufwendigere Konfiguration mit sich, allerdings sollte dies mit den zahlreichen Tutorials im Netz kein Problem sein.&lt;br /&gt;
&lt;br /&gt;
Vereinfacht wird die &quot;richtige&quot; Geschwindigkeit der Systemuhr normalerweise durch einen Baustein auf dem Motherboard bestimmt, wobei ein Quarzkristall x-mal pro Sekunde schwingt. Da es bei solchen Bauteilen allerdings immer auch Fertigungstoleranzen gibt, ist die Sekunde sogar auf auf zwei Motherboards des gleichen Modells unterschiedlich lang. Diese Sekunden unterscheiden sich dann auch noch einmal von der einer (extrem genauen) &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=721&amp;amp;entry_id=82&quot; title=&quot;http://de.wikipedia.org/wiki/Atomuhr&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Atomuhr&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Atomuhr&lt;/a&gt;. Dieser Unterschied wird auch Drift genannt, der bei jedem Computer unterschiedlich ist. Diesen Drift speichert der ntpd standardmässig unter /var/lib/ntp/ntp.drift und kann die Uhrzeit so auch ohne Verbindung in Netz sehr genau halten.&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommandozeilenprogramm ntpq kann man dem ntpd bei der Arbeit zusehen und Problemen auf den Grund gehen. Die verbundenen ntp Server werden mit dem Kommando &quot;peers&quot; angezeigt:&lt;br /&gt;
&lt;code&gt;
uwe@krusty ~ $ ntpq -n -c peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*129.70.132.33   129.70.130.70    2 u   45   64  377   65.492    4.168   0.805
+85.214.29.92    131.188.3.222    2 u    3   64  377   72.744   -0.136   0.702
+78.47.136.197   143.93.99.252    2 u   55   64  377   59.573    1.509   1.118
-92.51.130.224   85.214.71.202    3 u   60   64  377   69.906   -5.627   0.654
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Hier sollte mindestens ein Server mit einem &amp;#042;  markiert sein. Dieser ist für den ntpd am &quot;stabilsten&quot; zu erreichen und der eigene Referenzserver. Die mit + markierten Hosts wären die nächsten Kandidaten falls der Referenzserver nicht mehr verfügbarsein sollte. Mit &quot;associations&quot; kann man sich diese Beziehungen auch ansehen&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
uwe@krusty ~ $ ntpq -n -c associations

ind assID status  conf reach auth condition  last_event cnt
===========================================================
  1 54760  9624   yes   yes  none  sys.peer   reachable  2
  2 54761  9424   yes   yes  none  candidat   reachable  2
  3 54762  9424   yes   yes  none  candidat   reachable  2
  4 54763  9324   yes   yes  none   outlyer   reachable  2
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen Kommandozeilenmodus von ntpq in dem man sich austoben kann:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
uwe@krusty ~ $ ntpq
ntpq&amp;gt; ?
ntpq commands:
addvars        debug          lopeers        passociations  rl
associations   delay          lpassociations passwd         rmvars
authenticate   exit           lpeers         peers          rv
cl             help           mreadlist      poll           showvars
clearvars      host           mreadvar       pstatus        timeout
clocklist      hostnames      mrl            quit           version
clockvar       keyid          mrv            raw            writelist
cooked         keytype        ntpversion     readlist       writevar
cv             lassociations  opeers         readvar
ntpq&amp;gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Thu, 24 Dec 2009 12:24:00 +0100</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/82-guid.html</guid>
    <category>Linux</category>
<category>NTP</category>

</item>
<item>
    <title>IPv6 mit Hurricane Electric und OpenWRT</title>
    <link>http://blog.planet-uwe.de/archives/91-IPv6-mit-Hurricane-Electric-und-OpenWRT.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/91-IPv6-mit-Hurricane-Electric-und-OpenWRT.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=91</wfw:comment>

    <slash:comments>10</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=91</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Will man mit einem DSL Anschluss in Deutschland per IPv6 ins Internet und nicht extra dafür zu einem der &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=712&amp;amp;entry_id=91&quot; title=&quot;http://www.sixxs.net/faq/connectivity/?faq=native&amp;amp;country=de&quot;  onmouseover=&quot;window.status=&#039;http://www.sixxs.net/faq/connectivity/?faq=native&amp;amp;country=de&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;wenigen Provider die IPv6 nativ anbieten&lt;/a&gt; wechseln, so bleibt als einzig praktikable Möglichkeit derzeit nur ein &lt;a hre=&quot;http://en.wikipedia.org/wiki/6in4&quot;&gt;6in4 Tunnel&lt;/a&gt;. Der amerikanische Konzern Hurricane Electric (oder der einfacheit halber: HE) bietet unter &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=713&amp;amp;entry_id=91&quot; title=&quot;http://tunnelbroker.net/&quot;  onmouseover=&quot;window.status=&#039;http://tunnelbroker.net/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://tunnelbroker.net/&lt;/a&gt; einen kostenlosen IPv6 &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=714&amp;amp;entry_id=91&quot; title=&quot;http://en.wikipedia.org/wiki/Tunnel_broker&quot;  onmouseover=&quot;window.status=&#039;http://en.wikipedia.org/wiki/Tunnel_broker&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Tunnelbroker&lt;/a&gt; an, zu welchem man von jedem beliebigen DSL aus einen Tunnel betreiben kann. Nach der Registrierung kann unter &quot;Create Regular Tunnel&quot; ein neuer Tunnel beantragt werden. Dabei muss die eigene DSL IP (herauszufinden z.B. bei &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=715&amp;amp;entry_id=91&quot; title=&quot;http://www.whatismyip.org&quot;  onmouseover=&quot;window.status=&#039;http://www.whatismyip.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;www.whatismyip.org&lt;/a&gt;) allerdings pingbar sein, sonst scheitert der Antrag. Ausserdem sollte man gleich ein &quot;Routed /48&quot; beantragen, damit man die Clients hinter dem eigenen Router gleich mit IPv6 versorgen kann.&lt;br /&gt;
&lt;br /&gt;
Ich benutze auf meinem &lt;a hre=&quot;http://de.wikipedia.org/wiki/WRT54G&quot;&gt;DSL Router WRT54GL&lt;/a&gt; derzeit die Linuxdistribution &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=716&amp;amp;entry_id=91&quot; title=&quot;http://openwrt.org/&quot;  onmouseover=&quot;window.status=&#039;http://openwrt.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;OpenWRT&lt;/a&gt;. Es exitiert zwar eine &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=717&amp;amp;entry_id=91&quot; title=&quot;http://nuwiki.openwrt.org/oldwiki/IPv6_howto&quot;  onmouseover=&quot;window.status=&#039;http://nuwiki.openwrt.org/oldwiki/IPv6_howto&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Anleitung&lt;/a&gt; für IPv6 auf dieser Distribution, allerdings ist diese nicht mehr wirklich aktuell. Diese Anleitung wurde erfolgreich mit der OpenWRT Version 8.09.1 (Kamikaze) entwickelt. Um IPv6 mit HE zum fliegen zu bringen sind folgende Schritte notwendig:&lt;br /&gt;
&lt;br /&gt;
Zunächst müssen mit opkg install folgende Pakete installiert werden &lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
ip6tables
kmod-ip6tables
kmod-ipv6
radvd
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Der Tunnelbroker geht von einer statischen IP aus, bei DSL ändert sich diese jedoch üblicherweise mit jeder Neueinwahl. Um den Tunnelendpunkt bei jeder Änderung wieder aufzusetzen habe ich ein Shellskript erstellt. Es wird immer aufgerufen wenn sich ein Interfacestatus ändert. Zunächst wird die Benutzernummer gebraucht, welche auf der Hurricane Electric Tunelbroker Homepage direkt neben &quot;UserID&quot; steht.  Ebenfalls auf der HE Seite unter &quot;Tunnel Details&quot; ist die &quot;Global Tunnel ID&quot; zu finden. Der letzte notwendige Wert ist das mit MD5 gehashte Passwort. Dies lässt sich am einfachsten an der Shell erstellen:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
$ echo -n &#039;XXX&#039; | md5sum
bc9189406be84ec297464a514221406d  -
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Die MD5 Summe das Passworts XXX ist in diesem Beispiel also bc9189406be84ec297464a514221406d. Der letzte Wert der benötigt wird ist die &quot;Client IPv6 address&quot;, welche sich ebenfalls bei den &quot;Tunnel Details&quot; befindet.&lt;br /&gt;
&lt;br /&gt;
Diese Werte müssen in das Skript unten eingetragen und in der Datei /etc/hotplug.d/iface/10-ipv6 gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
#!/bin/sh

USER=&quot;XXX&quot;
PASS=&quot;XXX&quot;
ID=&quot;XXX&quot;
CLIENT=&quot;XXX/64&quot;
REMOTEV4=&quot;216.66.80.30&quot;
ROUTEDNET=&quot;XXX::/48&quot;

EXT=&quot;wan&quot;
INT=&quot;lan&quot;
TUNNEL=&quot;he-ipv6&quot;

. /etc/functions.sh      # common functions
include /lib/network     # include /lib/network/*.sh
scan_interfaces          # read and parse the network config


if [ &quot;$ACTION&quot; = &quot;ifup&quot; -a &quot;$INTERFACE&quot; = &quot;$EXT&quot; ]
then
        config_get IPV4 &quot;$EXT&quot; ipaddr
        logger &quot;updating ipv4 tunnel endpoint to $IPV4&quot;
        wget -O - &quot;http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=$IPV4&amp;amp;pass=$PASS&amp;amp;user_id=$USER&amp;amp;tunnel_id=$ID&quot; &gt; /dev/null 2&gt;&amp;amp;1
        ip tunnel add $TUNNEL mode sit remote $REMOTEV4 local $IPV4 ttl 255
        ip link set $TUNNEL up
        ip addr add $CLIENT dev $TUNNEL
        ip route add ::/0 dev $TUNNEL
        config_get LANIF &quot;$INT&quot; ifname
        ip route add $ROUTEDNET dev $LANIF
fi

if [ &quot;$ACTION&quot; = &quot;ifdown&quot; -a &quot;$INTERFACE&quot; = &quot;wan&quot; ]
then
        ip tunnel del $TUNNEL
        config_get LANIF &quot;$INT&quot; ifname
        ip route del $ROUTEDNET dev $LANIF
fi

&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Um die Kommunikation mit dem Tunnelbroker zu erlauben muss dieser in der OpenWRT IPv4 Firewall (/etc/config/firewall) freigeschaltet werden:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
config rule
        option src_ip   216.66.80.30
        option proto    41
        option target   ACCEPT
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Um den Router auch gegenüber dem Internet zu schützen sollten in die Datei /etc/firewall.user folgende Zeilen hinzugefügt werden:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
### ipv6 stuff
ip6tables -F INPUT
ip6tables -P INPUT DROP
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -F FORWARD
ip6tables -A FORWARD -j ACCEPT
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Diese Firewall schützt &lt;b&gt;nur&lt;/b&gt; den Router und nicht die Clients im Netz dahinter. Entweder man erweitert die Regeln oben entsprechend oder man spendiert jedem Client eine IPv6 Firewall. Die oben gemachten Änderungen werden nach einem &quot;/etc/init.d/firewall restart&quot; aktiv.&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen sind gemacht und nach einem &quot;ifdown wan; ifup wan&quot; sollte der Tunnel stehen. Dies kann gleich mit ping6 geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
root@OpenWrt:~# ping6 -c3 www.kame.net
PING www.kame.net (2001:200:0:8002:203:47ff:fea5:3085): 56 data bytes
64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: seq=0 ttl=51 time=294.092 ms
64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: seq=1 ttl=51 time=292.718 ms
64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: seq=2 ttl=51 time=293.255 ms

--- www.kame.net ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 292.718/293.355/294.092 ms
root@OpenWrt:~# ping6 -c3 ipv6.google.com
PING ipv6.google.com (2001:4860:a003::68): 56 data bytes
64 bytes from 2001:4860:a003::68: seq=0 ttl=59 time=19.912 ms
64 bytes from 2001:4860:a003::68: seq=1 ttl=59 time=15.248 ms
64 bytes from 2001:4860:a003::68: seq=2 ttl=59 time=15.082 ms

--- ipv6.google.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 15.082/16.747/19.912 ms
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Um nun die Clients im eigenen Heimnetz &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=718&amp;amp;entry_id=91&quot; title=&quot;http://www.ietf.org/rfc/rfc2462.txt&quot;  onmouseover=&quot;window.status=&#039;http://www.ietf.org/rfc/rfc2462.txt&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;per Autokonfiguration&lt;/a&gt; mit IPv6 zu versorgen muss der Linux Router Advertisement Daemon konfiguriert werden.  Dazu wird das oben beantragte Routed /48 benötigt. Die Konfiguration sieht bei mir folgendermassen aus:&lt;br /&gt;
&lt;br /&gt;
/etc/config/radvd&lt;br /&gt;
&lt;pre&gt;
config interface
        option interface        &#039;lan&#039;
        option AdvSendAdvert    1
        option AdvManagedFlag   0
        option AdvOtherConfigFlag 0
        option ignore           0

config prefix
        option interface        &#039;lan&#039;
        # If not specified, a non-link-local prefix of the interface is used
        option prefix           &#039;2001:470:9888::/64&#039;
        option AdvOnLink        1
        option AdvAutonomous    1
        option AdvRouterAddr    0
        option AdvPreferredLifetime     600
        option AdvValidLifetime 1200
        option ignore           0

config rdnss
        option interface        &#039;br-lan&#039;
        # If not specified, the link-local address of the interface is used
        option addr             &#039;&#039;
        option ignore           1
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Für die option &quot;prefix&quot; muss das eigene bei HE beantragte /48 eingetragen werden. Achtung: als Netzmaske für radvd ist /64 zwingend notwendig, denn nur so können sich die Clients mit Hilfe von EUI-64 selbst eine Adresse würfeln. Trägt man hier /48 bleiben 16 Bits übrig, von denen der Client nicht weiss, wie er sie füllen soll. Nachdem man den Daemon aktiviert und gestartet ist sollten alle Clients im dahinterliegenden Netz automatisch mit IPv6 versorgt werden, sofern das Betriebssystem dies unterstützt.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
root@OpenWrt:~# /etc/init.d/radvd enable
root@OpenWrt:~# /etc/init.d/radvd start
&lt;/code&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sat, 21 Nov 2009 15:49:54 +0100</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/91-guid.html</guid>
    <category>he</category>
<category>hurricaneelectric</category>
<category>ipv6</category>
<category>linux</category>
<category>openwrt</category>

</item>
<item>
    <title>Bitmagic</title>
    <link>http://blog.planet-uwe.de/archives/90-Bitmagic.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/90-Bitmagic.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=90</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=90</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Da ich eben doch eine Weile gebastelt möchte ich folgendes für die Nachwelt aufbewahren. Die Konvertierung einer Subnetmaske (übliches Format) in die (von Cisco benutzte) Wildcard Notation in python:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
uwe@barney ~ $ python
Python 2.6.2 (r262:71600, Sep  3 2009, 02:12:03)
[GCC 4.3.2] on linux2
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&gt;&gt;&gt; import socket, struct
&gt;&gt;&gt; a=struct.unpack(&#039;!L&#039;,socket.inet_aton(&quot;255.255.255.0&quot;))[0]
&gt;&gt;&gt; socket.inet_ntoa(struct.pack(&#039;!L&#039;,~a &amp;amp; 0xFFFFFFFF))
&#039;0.0.0.255&#039;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Ein paar Anmerkungen zum besseren Verständnis&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;!L wird gebraucht da  Network byte order Big Endian(!L) ist, die normalen PC Architekturen aber Litte Endian(L) verwenden.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Das bitweise AND mit 0xFFFFFFFF ist notwendig, da das NOT vor a einen negativen Wert erzeugt, welcher nicht mehr in den Long passt. Das wiederrum erzeugt eine unschöne Warnung. Dieses Vorzeichenbit wird mit der Verknüpfung positiv womit das ganze wieder passt.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Nachtrag:&lt;br /&gt;
&lt;br /&gt;
Um CIDR nach Netzmaske zu Konvertieren nimmt man das hier:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&amp;gt;&amp;gt;&amp;gt; socket.inet_ntoa(struct.pack(&#039;!L&#039;,8589934591L&amp;lt;&amp;lt;(32-24)))
&#039;255.255.255.0&#039;
&amp;gt;&amp;gt;&amp;gt; socket.inet_ntoa(struct.pack(&#039;!L&#039;,8589934591L&amp;lt;&amp;lt;(32-25)))
&#039;255.255.255.128&#039;
&amp;gt;&amp;gt;&amp;gt; socket.inet_ntoa(struct.pack(&#039;!L&#039;,8589934591L&amp;lt;&amp;lt;(32-26)))
&#039;255.255.255.192&#039;
&amp;gt;&amp;gt;&amp;gt; socket.inet_ntoa(struct.pack(&#039;!L&#039;,8589934591L&amp;lt;&amp;lt;(32-27)))
&#039;255.255.255.224&#039;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
2. Nachtrag&lt;br /&gt;
&lt;br /&gt;
Oder einfacher zu lesen (und zu verstehen):&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&amp;gt;&amp;gt;&amp;gt; socket.inet_ntoa(struct.pack(&#039;!L&#039;,0xFFFFFFFF&amp;lt;&amp;lt;(32-24)))
&#039;255.255.255.0&#039;
&amp;gt;&amp;gt;&amp;gt; socket.inet_ntoa(struct.pack(&#039;!L&#039;,0xFFFFFFFF&amp;lt;&amp;lt;(32-25)))
&#039;255.255.255.128&#039;
&amp;gt;&amp;gt;&amp;gt; socket.inet_ntoa(struct.pack(&#039;!L&#039;,0xFFFFFFFF&amp;lt;&amp;lt;(32-26)))
&#039;255.255.255.192&#039;
&amp;gt;&amp;gt;&amp;gt; socket.inet_ntoa(struct.pack(&#039;!L&#039;,0xFFFFFFFF&amp;lt;&amp;lt;(32-27)))
&#039;255.255.255.224&#039;
&lt;/code&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Thu, 12 Nov 2009 23:52:29 +0100</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/90-guid.html</guid>
    <category>python netmask wildcard cisco cidr</category>

</item>
<item>
    <title>Abgelegt</title>
    <link>http://blog.planet-uwe.de/archives/87-Abgelegt.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/87-Abgelegt.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=87</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=87</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Konfigurationsdateien unter *nix Systemen  werden üblicherweise in /etc abgelegt. Da es sich dabei meist um reine Textdateien handelt bietet sich eine Versionierung mit einem der bekannten Systeme an. Ich habe mich aus reiner Faulheit (meine Diplomarbeit enstand bereits damit) für &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=708&amp;amp;entry_id=87&quot; title=&quot;http://de.wikipedia.org/wiki/Subversion_(Software)&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Subversion_(Software)&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Subversion&lt;/a&gt; entschieden. Die Einführung in SVN, so die Abkürzung für Subversion, und in &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=709&amp;amp;entry_id=87&quot; title=&quot;http://de.wikipedia.org/wiki/Versionsverwaltung&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Versionsverwaltung&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Versionsverwaltung&lt;/a&gt; allgemein spare ich mir an dieser Stelle da es dazu schon viele hervorragende Quellen im Web gibt.&lt;br /&gt;
&lt;br /&gt;
Ich habe diverse Rechner, deren /etc ich auf diese Weise sichern und will und einen Rootserver welchen ich als zentrales &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=710&amp;amp;entry_id=87&quot; title=&quot;http://de.wikipedia.org/wiki/Repository&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Repository&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Repository&lt;/a&gt; zur Speicherung benutzen möchte.&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das dazu das SVN Repository angelegt:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
uwe@maninthemiddle ~ $ svnadmin create /home/uwe/repos&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Mehr muss auf dem Server auch nicht mehr gemacht werden. Der Rest wird vom Clientrechner (in meinem Fall mit dem Namen &amp;quot;Krusty&amp;quot; über SSH erledigt. Dazu bietet es sich an &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=711&amp;amp;entry_id=87&quot; title=&quot;http://de.wikipedia.org/wiki/Public-Key-Authentifizierung&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Public-Key-Authentifizierung&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Key-basierende Authentifizierung&lt;/a&gt;  für SSH zu benutzen. Auch hier sei auf die vielen guten Tutorials im Web verwiesen. Da ich SSH normalerweise als unprivilegierter Anwender benutze /etc aber nur als root vollständig gelesen werden kann, sollte das SSH profil von root dementsprechend angepasst werden. Dies beinhaltet den richtigen Benutzernamen, sowie eine identity Datei welche den private key enthält. Die entsprechende Konfigurationsdatei /root/.ssh/config sieht bei mir dementsprechend so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Host maninthemiddle.de&lt;br /&gt;
User uwe&lt;br /&gt;
IdentityFile /home/uwe/.ssh/id_rsa&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Nun muss im Repository ein Verzeichnis angelegt werden in dem die Dateien später landen sollen:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
krusty etc # svn mkdir svn+ssh://maninthemiddle.de/home/uwe/repos/etc-krusty&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Dieses wird im Verzeichnis /etc auf dem lokalen Rechner ausgecheckt und ist damit mit diesem verbunden:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
krusty etc # svn co svn+ssh://maninthemiddle.de/home/uwe/repos/etc-krusty /etc&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Mit svn add können nun Dateien hinzugefügt und mit svn commit ins Repository hochgeladen werden. Unschön ist dabei allerdings, dass nicht hinzugefügte Dateien bei svn status mit einem Fragezeichen auftauchen und die Übersichtlichkeit stark leidet:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
krusty etc # svn status&lt;br /&gt;
 M     .&lt;br /&gt;
?      xinetd.conf&lt;br /&gt;
?      opera6rc.fixed&lt;br /&gt;
?      nanorc&lt;br /&gt;
?      racoon&lt;br /&gt;
?      java-config-2&lt;br /&gt;
...&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Softwareentwicklung sorgt dieser Mechanismus dafür, dass keine Datei vergessen wird. Hier tauchen in diesem Fall jedoch in der Mehrzahl Dateien auf die gar nicht ins Repository kommen sollen. Um den Überblick zu behalten habe ich deshalb SVN angewiesen alle Dateien zu ignorieren, die nicht eingecheckt sind.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
krusty etc # svn propset svn:ignore &#039;*&#039; /etc&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für alle anderen Rechner einfach die gleichen Schritte durchführen, womit  Probleme mit gelöschten/verschlimmbesserten Konfigurationsdateien der Vergangenheit angehören sollten.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nachtrag:&lt;/b&gt;&lt;br /&gt;
Gerade unter gentoo sollte auch die aktuelle Kernelkonfiguration gesichert werden. Ich setze dazu einfach einen Symlink nach /etc und füge diese Datei zum Repository hinzu.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
barney etc # ln -s /usr/src/linux/.config kernelconfig&lt;br /&gt;
barney etc # svn add kernelconfig&lt;br /&gt;
A         kernelconfig&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nachtrag 2:&lt;/b&gt;&lt;br /&gt;
Die alten Versionen einzelner Dateien kann man mittels svn export -r REVISION holen:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
uwe@barney ~/tmp $ svn log svn+ssh://maninthemiddle.de/home/uwe/repos/etc-barney/lilo.conf&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
r18 | uwe | 2009-11-26 21:49:23 +0100 (Do, 26. Nov 2009) | 1 Zeile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
r17 | uwe | 2009-11-26 21:43:01 +0100 (Do, 26. Nov 2009) | 1 Zeile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
uwe@barney ~/tmp $ svn export -r 17 svn+ssh://maninthemiddle.de/home/uwe/repos/etc-barney/lilo.conf&lt;br /&gt;
A    lilo.conf&lt;br /&gt;
Export abgeschlossen.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;b&gt;Nachtrag 3:&lt;/b&gt;&lt;br /&gt;
Um z.B. die /etc/X11/xorg.conf ins Repository hinzufügen zu können muss auch das Verzeichnis /etc/X11/ im Repository vorhanden sein. Subversion fügt mit svn add /etx/X11 allerdings auch alle Dateien unterhalb dieses Verzeichnisses ein. Stattdessen möchste man die Option  --non-recursive benutzen:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
barney etc # svn add --non-recursive X11/&lt;br /&gt;
A         X11&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Versehentlich ins Repository aufgenomme Dateien kann man mit svn delete wieder aus diesem entfernen, allerdings löscht svn dann auch die lokale Kopie. Hier sollte man --keep-local als Option mitgeben:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
barney portage # svn delete --keep-local savedconfig/                   &lt;br /&gt;
D         savedconfig/sys-apps/busybox-1.13.2                           &lt;br /&gt;
D         savedconfig/sys-apps                                          &lt;br /&gt;
D         savedconfig                                                   &lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 01 Jun 2009 17:22:16 +0200</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/87-guid.html</guid>
    <category>linux</category>
<category>subversion</category>
<category>svn</category>

</item>
<item>
    <title>Gedreht</title>
    <link>http://blog.planet-uwe.de/archives/85-Gedreht.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/85-Gedreht.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=85</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=85</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Wer kennt das nicht. Nach dem Urlaub werden Fotos am Bildschirm bestaunt und es dauert nicht lange bis das kollektive Kopfkippen nach rechts oder links beginnt. Glücklicherweise haben inzwischen sogar Handykameras Neigungssensoren eingebaut, womit die Elektronik die Ausrichtung in den &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=704&amp;amp;entry_id=85&quot; title=&quot;http://de.wikipedia.org/wiki/EXIF&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/EXIF&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;EXIF&lt;/a&gt; Daten eines Bildes speichern kann. Somit ist es für ein Ausgabegerät möglich das Foto anhand dieser Daten wieder richtig herum auf den Bildschirm zu bringen. Der Bildbetrachter beispielsweise &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=705&amp;amp;entry_id=85&quot; title=&quot;http://gqview.sourceforge.net/&quot;  onmouseover=&quot;window.status=&#039;http://gqview.sourceforge.net/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;gqview&lt;/a&gt; kann die Fotos so schon vor der Anzeige drehen. Allerdings wirkt sich dies nur auf die Darstellung aus und die gespeicherten Fotos behalten ihre Ausrichtung. Da nicht alle Bildbetrachter so eine Funktion enthalten will man natürlich das gespeicherte Material zurecht rücken. Dabei ist zu bedenken, dass &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=706&amp;amp;entry_id=85&quot; title=&quot;http://de.wikipedia.org/wiki/JPEG&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/JPEG&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;JPEG&lt;/a&gt; ein verlustbehaftetes Format ist und das Laden, Drehen und erneute Speichern zur Qualitätsminderung führen würde. Glücklicherweise wurden solche Fälle von der &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=707&amp;amp;entry_id=85&quot; title=&quot;http://de.wikipedia.org/wiki/Joint_Photographic_Experts_Group&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Joint_Photographic_Experts_Group&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Joint Photographic Experts Group&lt;/a&gt; bei der Entwicklung des Formats bedacht. Aus diesem Grund wurden einige spezielle verlustfreie JPEG Operationen definiert wie z.B. drehen um vielfache von 90° und das Beschneiden eines Bildes um vielfache von 16 Pixeln. Das Verarbeitende Programm muss diese JPEG Operationen allerdings explizit unterstützen, sonst werden in der Regel verlustbehaftete Operationen durchgeführt. Genug der Theorie, hier die Linux Praxis:&lt;br /&gt;
&lt;br /&gt;
Unter Gentoo befinden sich alle hier genannten Tools im Paket &lt;tt&gt;media-libs/jpeg&lt;/tt&gt;. Das Programm &lt;tt&gt;jpegtran&lt;/tt&gt; unterstützt besagte JPEG Operationen und kann die Bilder wie gewünscht drehen. Es empfiehlt sich außerdem immer den Parameter &lt;tt&gt;-copy all&lt;/tt&gt; zu verwenden, damit die EXIF Daten erhalten bleiben. Allerdings stimmt nun die in den EXIF Daten gespeicherte Ausrichtung nicht mehr. Diese kann man dann mit dem Tool &lt;tt&gt;jpegexiforient&lt;/tt&gt; und dem Parameter &lt;tt&gt;-1&lt;/tt&gt; auf Normalausrichtung setzen. Das ganze ist natürlich automatisierbar und mit dem Skript &lt;tt&gt;exifautotran&lt;/tt&gt; umgesetzt. Zunächst wird die Ausrichtung gelesen, dann richtig gedreht und zum Schluss wird im EXIF Teil wieder die Normalausrichtung gesetzt. Ein &lt;tt&gt;exifautotran *.jpg&lt;/tt&gt; entlastet also die Nackenmuskulatur während des Fotoabends.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt; unter Ubuntu heißt das entsprechende Paket libjpeg-progs 
    </content:encoded>

    <pubDate>Sun, 13 Jan 2008 13:57:16 +0100</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/85-guid.html</guid>
    <category>EOS</category>
<category>EXIF</category>
<category>Foto</category>
<category>JPEG</category>
<category>Linux</category>

</item>
<item>
    <title>Verschlüsselt</title>
    <link>http://blog.planet-uwe.de/archives/84-Verschluesselt.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/84-Verschluesselt.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=84</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=84</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Cisco bietet auf einer Menge Devices IPSec zur verschlüsselten Remote Anbindung  entfernter Standorte. Ich habe das ganze letzte Woche anhand einiger Laboraufbauten getestet. Mit von der Partie waren ein Router der Serie 2600er mit IOS, ein VPN Concentrator (3000er Serie) und eine PIX. Das ganze sah in etwa folgendermassen aus:&lt;br /&gt;
&lt;br /&gt;
PC1 --(192.168.55.0/24)-- Cisco Device 1 --(192.168.66.0/24)-- Cisco Device 2 --(192.168.77.0/24)-- PC2&lt;br /&gt;
&lt;br /&gt;
Zwischen beiden Cisco Devices sollte ein IPSec Tunnel aufgebaut werden und die Netze 192.168.55.0/24 und 192.168.77.0/24 über diesen verschlüsselt übertragen werden. Ziel war es also, dass PC1 PC2 pingen kann.&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration ist zwar recht einfach, wenn man die Tutorials auf der Cisco-Homepage befolgt, wenn es danach allerdings nicht so tut wie es soll, wird es mühsam. Deshalb hier meine gesammelten Erkenntnisse:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Beide Cisco Devices sollten sich nicht im selben Subnet befinden (der Aufbau von oben bringt also Probleme). Es kommt zu sehr seltsamen Effekten, wenn es kein Default Gateway bzw. keine Default Route gibt. Das Default Gateway sollte dabei natürlich auf dem äußeren Interface liegen.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Die PIX nimmt beim Hashing der Identity standardmäßig den &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=699&amp;amp;entry_id=84&quot; title=&quot;http://en.wikipedia.org/wiki/FQDN&quot;  onmouseover=&quot;window.status=&#039;http://en.wikipedia.org/wiki/FQDN&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;FQDN&lt;/a&gt;, was ohne DNS-Namen im Laboraufbau natürlich sinnfrei ist. Mit folgendem Kommando kann man auf IP Adressen umschalten: &lt;tt&gt;isakmp identity address&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Ich schreib das jetzt so einfach runter, aber besonders der erste Punkt hat doch einiges an Zeit verschlungen. Ich hoffe ich erspare jemand anderem damit die Sucherei nach dem Fehler.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sat, 25 Aug 2007 17:43:35 +0200</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/84-guid.html</guid>
    <category>Cisco</category>
<category>Concentrator</category>
<category>IOS</category>
<category>IPSec</category>
<category>PIX</category>
<category>VPN</category>

</item>
<item>
    <title>Manipuliert</title>
    <link>http://blog.planet-uwe.de/archives/80-Manipuliert.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/80-Manipuliert.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=80</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=80</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    &lt;a href=&quot;http://blog.planet-uwe.de/exit.php?url_id=698&amp;amp;entry_id=80&quot; title=&quot;http://www.secdev.org/projects/scapy/&quot;  onmouseover=&quot;window.status=&#039;http://www.secdev.org/projects/scapy/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Scapy&lt;/a&gt; ist ein ziemlich cooler Packetgenerator/Analyzer/vielesmehr. Die Projektseite gibt mit der &quot;Quick Demo&quot; schon eine kleine Einführung in die Fähigkeiten dieses Tools.&lt;br /&gt;
&lt;br /&gt;
Leider ist die Dokumentation im im Gegensatz zum Programm noch weitgehend unbrauchbar und deshalb will ich versuchen hier immer mal wieder nützliche Scapy Skripte/Einzeiler vorzustellen.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Wilde DHCP Server finden&lt;/h2&gt;&lt;br /&gt;
Problem: irgendwo im Netz schwirrt ein nicht genemigter DHCP Server herum und vergibt IP Adressen. Die umständliche Methode wäre das eigene Interface umzukonfigurieren und einen DHCP Request zu machen. Scapy schafft das ohne diesen lästigen Mehraufwand.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&gt;&gt;&gt; dhcp_request(iface=&quot;eth1&quot;)&lt;br /&gt;
WARNING: conf.checkIPaddr is not 0, I may not be able to match the answer&lt;br /&gt;
Begin emission:&lt;br /&gt;
Finished to send 1 packets.&lt;br /&gt;
.......................................&lt;br /&gt;
Received 39 packets, got 0 answers, remaining 1 packets&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Ein gleichzeitiger tcpdump offenbart ide MAC-Adresse des Übeltäters:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
# tcpdump -e -i eth1 port 67 or port 68&lt;br /&gt;
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode&lt;br /&gt;
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes&lt;br /&gt;
&lt;br /&gt;
21:43:17.938745 00:11:11:11:11:11 (oui Unknown) &gt; Broadcast, ethertype IPv4 (0x0800), length 286: 0.0.0.0.bootpc &gt; 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:11:11:11:11:11 (oui Unknown), length 244&lt;br /&gt;
&lt;br /&gt;
21:43:17.952684 00:22:22:22:22:22 (oui Unknown) &gt; Broadcast, ethertype IPv4 (0x0800), length 342: ..bootps &gt; 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length 300&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem managbaren Switch lässt sich die Adresse 00:22:22:22:22:22 nun schnell einem Port zuordnen. Unter IOS z.B. mit show mac-address-table oder unter CatOS mit show cam dynamic. Dann muss man nur noch das Kabel verfolgen und dem User auf die Finger klopfen ;).&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 05 Mar 2007 21:35:30 +0100</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/80-guid.html</guid>
    <category>debugging</category>
<category>DHCP</category>
<category>Linux</category>
<category>Netzwerk</category>
<category>Security</category>

</item>
<item>
    <title>Genug</title>
    <link>http://blog.planet-uwe.de/archives/79-Genug.html</link>
    
    <comments>http://blog.planet-uwe.de/archives/79-Genug.html#comments</comments>
    <wfw:comment>http://blog.planet-uwe.de/wfwcomment.php?cid=79</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.planet-uwe.de/rss.php?version=2.0&amp;type=comments&amp;cid=79</wfw:commentRss>
    

    <author>uwe (Uwe Weissenbacher)</author>
    <content:encoded>
    Ich hab die Schnauze gestrichen voll. Trotz der Tatsache, dass Trackbacks auf moderieren stehen, erhalten ich ständig Müll von irgendwelchen asozialen Spammern. Aus diesem Grund sind sie jetzt global deaktiviert. Wer einen Trackback setzen will, möge mich per Mail kontaktieren.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 13 Feb 2007 14:53:04 +0100</pubDate>
    <guid isPermaLink="false">http://blog.planet-uwe.de/archives/79-guid.html</guid>
    <category>spam</category>

</item>

</channel>
</rss>
