SIP tag, Call-ID, Via received Felder in SIP Invite

Um via SIP einen entfernten Teilnehmer anzurufen, benötigt man nicht zwingend einen VOIP-Provider der Aufgaben wie Nummernregistrierung und NAT-Umgehung übernimmt. Man kann auch direkt einen Teilnehmer anrufen.

Nicht jeder Soft-Client kann dies. Mit Empathy unter Linux hats nicht geklappt – LinPhone geht problemlos und hat aus meiner Sicht auch die intuitivere Oberfläche.

Gewählt wird mit KENNUNG@IP

Möchte man eine fremde Fritzbox anrufen und kennt die Rufnummer ist dies rufnummer@ip-der-fritzbox

Wählt man eine unbekannte Kennung läuft der Dialog wie folgt ab:

Anrufer schickt einen SIP-Invite (Anforderung zum Gesprächsaufbau) an den Angerufenen.

IP s1.sip > ziel.sip: SIP, length: 900
Eh….@.@…….[/……..-.INVITE sip:1@angerufener SIP/2.0
Via: SIP/2.0/UDP 192.168.0.151:5060;rport;branch=z9hG4bK2041591
From: ;tag=1705358941
To:
Call-ID: 546189454
CSeq: 20 INVITE
Contact:
Content-Type: application/sdp
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Max-Forwards: 70
User-Agent: Linphone/3.6.1 (eXosip2/4.1.0)
Subject: Phone call
Content-Length: 435

Der Angerufen quittiert mit … wenn die Kennung nicht bekannt ist.

11:24:26.060491 IP ziel.sip > s1.sip: SIP, length: 291
E..?C…>.M.[/………..+.`SIP/2.0 404 Not Found
Via: SIP/2.0/UDP 192.168.0.151:5060;rport=5060;branch=z9hG4bK2041591;received=absender-IP
From: ;tag=1705358941
To: ;tag=16-zeichen-hex
Call-ID: 546189454
CSeq: 20 INVITE
User-Agent: FRITZ!OS
Content-Length: 0

Die einzelnen Felder zur Erklärung:

Via: Definiert den Übertragungsweg wie ein Teilnehmer erreicht werden kann

Via enthält ebenso einen Parameter received – dies definiert die erkannte Absender-IP der Gegenstelle.

O-Ton:

SIP does provide the client
with the source IP address that the server saw in the request. This
information is conveyed in the received parameter in the topmost Via
header of the response. This information has proved useful for basic
NAT traversal, debugging purposes, and support of multi-homed hosts“

Quelle: https://tools.ietf.org/html/draft-ietf-sip-nat-02

Call-ID: Eindeutige Kennung für die eigentliche Verbindung – einheitlich zwischen zwei Gesprächspartnern
Tag: Eindeutige Kennung einer Gegenstelle – Anrufer und Angerufener generieren sich tag – hier die Erklärung:

When a tag is generated by a UA for insertion into a request or
response, it MUST be globally unique and cryptographically random
with at least 32 bits of randomness. A property of this selection
requirement is that a UA will place a different tag into the From
header of an INVITE than it would place into the To header of the
response to the same INVITE. This is needed in order for a UA to
invite itself to a session, a common case for „hairpinning“ of calls
in PSTN gateways. Similarly, two INVITEs for different calls will
have different From tags, and two responses for different calls will
have different To tags.

Quelle: https://tools.ietf.org/html/rfc3261

Zabbix – Tips&Tricks aus der Praxis

Bei den Actions kann custom expression verwendet werden.

Hat man z.B. 10 Applications, die man ausnehmen möchte, braucht man eine custom expression.

(A and B and C and D and E and (F or G or H or I or J or K))

Achtung es gibt eine Limtierung von 255 Bytes.

Möchte man nicht extra alle Application auflisten zuvor, kann man den speziellen Items eine Sammel-App zuweisen mit dem Namen – Sammelitem – und nur auf dieses filtern.

§ 13 UWG – Unlauter Wettbewerb

Für alle bürgerlichen Rechtsstreitigkeiten (…) sind die Landgerichte ausschließlich zuständig. Hat man also ein Problem mit Spam-E-Mails ist der Weg ausschließlich über das Landgericht.
am Landgericht herrscht Anwaltspflicht – man kann also nicht wie beim Amtsgericht selbst Klagen einreichen.

zbxsmokeping patch – invalid parameter -v

38,41c38,41

< $ZBXSENDER -z $ZBXSERVER -p 10051 -s $HOSTNAME -k SmokLoos -o ${tab[0]} -v | grep "Failed 1" < $ZBXSENDER -z $ZBXSERVER -p 10051 -s $HOSTNAME -k SmokLatencyMin -o ${tab[1]} -v | grep "Failed 1" < $ZBXSENDER -z $ZBXSERVER -p 10051 -s $HOSTNAME -k SmokLatencyMax -o ${tab[3]} -v | grep "Failed 1" < $ZBXSENDER -z $ZBXSERVER -p 10051 -s $HOSTNAME -k SmokLatencyAvg -o ${tab[2]} -v | grep "Failed 1" --- > if [ ! -z „${tab[0]}“ ]; then $ZBXSENDER -z $ZBXSERVER -p 10051 -s $HOSTNAME -k SmokLoos -o ${tab[0]} -v | grep „Failed 1“; fi

> if [ ! -z „${tab[1]}“ ]; then $ZBXSENDER -z $ZBXSERVER -p 10051 -s $HOSTNAME -k SmokLatencyMin -o ${tab[1]} -v | grep „Failed 1“; fi

> if [ ! -z „${tab[3]}“ ]; then $ZBXSENDER -z $ZBXSERVER -p 10051 -s $HOSTNAME -k SmokLatencyMax -o ${tab[3]} -v | grep „Failed 1“; fi

> if [ ! -z „${tab[2]}“ ]; then $ZBXSENDER -z $ZBXSERVER -p 10051 -s $HOSTNAME -k SmokLatencyAvg -o ${tab[2]} -v | grep „Failed 1“; fi

ESzabbix.py – Patch für ElasticSearch 1.4

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster.html
https://github.com/serialsito/Elasticsearch-zabbix/issues/4

Der Patch hier:

— managers.py.orig 2015-02-11 14:20:49.428124337 +0100
+++ managers.py 2015-02-11 14:53:30.283293505 +0100
@@ -495,11 +495,11 @@
if all_nodes:
path = make_path(‚_shutdown‘)
elif master:
– path = make_path(„_cluster“, „nodes“, „_master“, „_shutdown“)
+ path = make_path(„_nodes“, „_master“, „_shutdown“)
elif nodes:
– path = make_path(„_cluster“, „nodes“, „,“.join(nodes), „_shutdown“)
+ path = make_path(„_nodes“, „,“.join(nodes), „_shutdown“)
elif local:
– path = make_path(„_cluster“, „nodes“, „_local“, „_shutdown“)
+ path = make_path(„_nodes“, „_local“, „_shutdown“)
if delay:
try:
int(delay)
@@ -574,7 +574,7 @@
list of indices to include in the response.

„““
– path = make_path(„_cluster“, „state“)
+ path = make_path(„_“, „state“)
parameters = {}

if filter_nodes is not None:
@@ -602,7 +602,7 @@
The cluster :ref:`nodes info ` API allows to retrieve one or more (or all) of
the cluster nodes information.
„““
– parts = [„_cluster“, „nodes“]
+ parts = [„_nodes“]
if nodes:
parts.append(„,“.join(nodes))
path = make_path(*parts)
@@ -622,9 +622,9 @@
The cluster :ref:`nodes info ` API allows to retrieve one or more (or all) of
the cluster nodes information.
„““
– parts = [„_cluster“, „nodes“, „stats“]
+ parts = [„_nodes“, „stats“]
if nodes:
– parts = [„_cluster“, „nodes“, „,“.join(nodes), „stats“]
+ parts = [„_nodes“, „,“.join(nodes), „stats“]

path = make_path(*parts)
return self.conn._send_request(‚GET‘, path)

Zabbix Postgresql Backup ohne historische Daten

# Sichern mit Ausnahme von großen Tabellen (-T …)

echo „`date` : DB ohne hist. Daten sichern beginnt“ >> $logfile

/usr/pgsql-9.2/bin/pg_dump –host localhost –port 5432 –username „postgres“ –no-password -T acknowledges* -T alerts* -T audit* -T events* -T history* -T trends* –verbose –file „/media/nfs_backup/$datum-zabbix_datensicherung_db_ohne_hist_daten.sql“ „zabbix“

# Sichern der nur großen Tabellen, jedoch nur Schema ohne Daten (-t –schema-only)

/usr/pgsql-9.2/bin/pg_dump –host localhost –port 5432 –username „postgres“ –no-password –schema-only -t acknowledges* -t alerts* -t audit* -t events* -t history* -t trends* –verbose ‚zabbix‘ >> „/media/nfs_backup/$datum-zabbix_datensicherung_db_ohne_hist_daten.sql“