Mittwoch, 14. Dezember 2011

Bash: Converting IPs to Hostnames within a file or stream

I recently stumbled upon an interesting problem.

Imagine you have many IP addresses in a file or piped input. How to reverse DNS these entries, that is, how to substitute them with host names?

Example:

Blah;10.1.73.70:8800;10.1.73.69:8800;10.1.73.68:8800;10.1.73.67:8800;10.1.73.66:8800
Lalalala;10.1.73.70:8800;10.1.73.69:8800;10.1.73.68:8800;10.1.73.67:8800;10.1.73.66:8800;1
...

Well... took me a few hours, but once again, Perl magic to the rescue:

cat file | perl -pe 'sub rep{$host=`host $_[0]`;$host=~'s#\\n##g';$host=~'s#\(.+\ \|\.$\)##g';return $host} s#([^0-9]+)?([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)#$1.rep($2)#eg';

So, for "LALALA---8.8.8.8---BLAAAAH---4.2.2.2---LALALA" you'd get "LALALA---google-public-dns-a.google.com---BLAAAAH---vnsc-bak.sys.gtei.net---LALALA".

Cool or cool?

Mittwoch, 16. Februar 2011

Teamspeak 3 Wav to Mp3

This is rather a note to myself. If you try to convert a wav-file with Lame, which had been written by Teamspeak 3, you'll probably encounter the following error:

Unsupported data format: 0x0003

One solution is, to resample it with Sox:

sox ts3.wav -b 16 -r 44100 converted.wav

Now, you may convert it with lame (or oggenc):

lame -V9 converted.wav final.mp3

or directly by piping:

sox ts3.wav -b 16 -r 44100 -t wav - | lame \
-V9 - final.mp3


I've chosen -V9 since that voice quality was still good for me. The original file had 906 MB, the other wav (generated by Sox) had 417 MB. I finally got mp3's of 18 MB (with -V9) and 26 MB (with -V8).

Montag, 4. Januar 2010

PrimaCom Internet verteilen mit Knoppix

Wenn Sie einen PrimaCom-Anschluss besitzen und das hier lesen, werden sie vermutlich bemerkt haben, dass im Windows für die LAN Verbindung keine Internetverbindungsfreigabe möglich ist. Das liegt möglicherweise daran, dass das PrimaCom-Gerät sich einmalig den erstbesten Rechner sucht, und ihm eine dynamische, externe IP zuweist. Über diese wird dann kommuniziert. Es ist eben ein "Cable-Modem", das via Ethernet funktioniert, zum Leidwesen aller Windows-User, die nur eine Netzwerkkarte haben - oder grad keinen Hardware-Router zur Hand. Aber es gibt ja zum Glück noch andere Systeme. Mit Knoppix lässt sich alles ordentlich dahin routen wo es hin soll.

Wir wollen:
  • Beliebig viele PCs online haben
  • Ohne Hardware-Router
  • Mit nur einer Netzwerkkarte pro PC
Was man dafür braucht:
  • Einen Hub oder Switch
  • Einen Rechner auf dem Knoppix dann laufen wird (oder ein anderes Linux)
Letzteres sollte idealerweise das Gerät sein, auf das das Modem standardmäßig anspricht. Sollte dies nicht der Fall sein, könnte eventuell ein Modem-Reset von Nöten sein, was ich allerdings nicht ausprobiert habe.

So sieht die Konfiguration dann aus:
|---------|        ________        _____________
| Knoppix |_______| Switch | _| PrimaCom |
| PC | #-oooo-o-# / | Cable-Modem |
|---------| || \____/ #-------------#
||
|---------| || |---------|
| Anderer |_________||____________| Anderer |
| PC 1 | | PC 2 |
|---------| |---------|
Wenn kein Crosskabel vorhanden ist, kommt das Modem an den Uplink-Port des Switches (die sind meistens extra gekennzeichnet). Wenn der PC mit Knoppix startet, müssten die Netzwerkeinstellungen für's Internet schon korrekt sein.

Unter Knoppix dann folgendes (mit sudo davor, wenn es Probleme mit den Berechtigungen gibt):

  • ifconfig eth0:1 192.168.0.1 netmask 255.255.255.0 up
  • sysctl net.ipv4.ip_forward=1
  • iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Nun gibt es für die anderen Geräte zwei Möglichkeiten:

A) Manuelle Konfiguration
B) Automatische Konfiguration

A geht mit Linux so:

  • ifconfig eth0 192.168.0.2 netmask 255.255.255.0 up
  • route add default gw 192.168.0.1
  • echo "nameserver 8.8.8.8" >> /etc/resolv.conf

Und für Windows:

  • IP-Adresse: 192.168.0.2
  • Subnetzmaske: 255.255.255.0
  • Standardgateway: 192.168.0.1
  • DNS: 8.8.8.8
Natürlich brauch der nächste Rechner dann 192.168.0.3 usw.

Für Möglichkeit B muss ein DHCP Server auf dem Knoppix Rechner eingerichtet werden.

Das Cable-Modem ist ansich nicht schlecht. Vor allem mag ich den dicken, großen Knopf zum An- und Ausschalten. Es bietet zwar einen DHCP Server, aber keine Routing Funktionalität. Warum man nun scheinbar ausschließlich durch einen Reset des Modems den Zielrechner ändern kann... tja. Als langfristige Lösung bietet sich am Besten ein wLan Hardware-Router an.