nils-ohlmeier / sipsak Goto Github PK
View Code? Open in Web Editor NEWSIP swiss army knife
License: GNU General Public License v2.0
SIP swiss army knife
License: GNU General Public License v2.0
REQUIREMENTS ============ None. Optional: - Have GnuTLS (http://www.gnutls.org/) or OpenSSL (http://www.openssl.org/) installed on your system to use their MD5 implementations instead of sipsak own version. - Have c-ares (http://daniel.haxx.se/projects/c-ares/) installed on your system to get DNS SRV lookup support compiled into your sipsak binary. INSTALLATION ============ Prerequisites (installed): - autoconf >= 2.69 - automake - pkg-config The usual: autoreconf --install ./configure make followed by an optional make install if the binary should be available for all users on that host. TESTS ===== Running tests can be done with make check be sure to have check -- unit test framework for C -- installed apt-get install check yum install check brew install check USAGE ===== Please read the man page. It also contains some typical usage examples at the end. Have fun Nils Ohlmeier
Hello, I just wanted to highlight that when the protocol is TCP the variable int rawsock;
is never initialized and running the program from a daemonized script (nohup + background) causes the "received ICMP message" to be displayed then returning the uninitialized value and causing a message flooding because of an infinite loop in the shoot() function.
Putting int rawsock = -1;
(transport.c:104) is enough to fix the issue.
Cheers!
Hello,
Currently, TLS transport support works only with GnuTLS. However, on Rocky Linux 9 with a simple
sipsak -s sip:check@<server.address>:5061 --transport=tls
I'm getting
nothing received, select returned error
I've tried to compile it with OpenSSL support, but seems sipsak is not supporting OpenSSL 3.0 library API.
Hi Nils,
I run autoreconf --install and get a warning:
Makefile.am:7: warning: compiling 'src/transport.c' in subdir requires 'AM_PROG_CC_C_O' in 'configure.ac'
Running tests end with errors
My configuration:
Centos 7 3.10.0-1160.62.1.el7.x86_64
autoconf (GNU Autoconf) 2.69
automake (GNU automake) 1.13.4
Greetings,
Is this the official upstream for this project?
If so, it might be helpful to include that the project has moved to github,
from the previous sourceforge ref, (https://sourceforge.net/projects/sipsak.berlios).
sipsak's configure keeps trying to use libgnutls-config which has been replaced by pkg-config. I'll try to get around to making a patch, but I figured I should report this in case someone can fix it quicker.
Hi,
Today I've added sipsak in my Smokeping server. There is one improvement i would like to request. I hope you are open to the suggestion.
As you may know, Smokeping monitors servers 24/7. By default it sends it's "pings" quickly after eachother and then waits for the next period to start. I've changed this behaviour for the normal pings to be spread out over time. Example: 20 pings per 300 seconds would mean an interval of 15 seconds. But that would leave no time for the RTT. So my ping delays are on 14 seconds.
I would love for it to be possible for sipsak to also have an option for a delay between the OPTIONS pings.. In fping it is called hostinterval.
Thanks,
Dave
When using the installation from README on ubuntu 18.04, autoreconf reports several errors and ./configure fails afterwards:
$ autoreconf --install
configure.ac:37: error: possibly undefined macro: AC_CHECK_HEADERS
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:59: error: possibly undefined macro: AC_DEFINE
configure.ac:69: error: possibly undefined macro: AC_SEARCH_LIBS
autoreconf: /usr/bin/autoconf failed with exit status: 1
Autoreconf should run without errors or the requirements should be reviewed.
I have Ubuntu 20.04 server with no entry for DNS name in /etc/hosts
, so my hostname is my.server.com and /etc/hosts
doesn't have record for that. Nevertheless hostnamectl return proper DNS name for server itself and everything works as it should(except sipsak).
So problem is that in this environment when I do sipsak -s sip:127.0.0.1
, sipsak makes DNS request to find out what server is behind my.server.com. It is easy to reproduce, just run sipsak with similar config and make tcpdump.
This I believe is not ideal behavior.
sipsak 0.9.7 by Nils Ohlmeier
Copyright (C) 2002-2004 FhG Fokus
Copyright (C) 2004-2005 Nils Ohlmeier
compiled with DEFAULT_TIMEOUT=500, FQDN_SIZE=65, LONG_OPTS, INTERNAL_MD5, TLS_SUPPORT(GNUTLS), SRV_SUPPORT(RULI), STR_CASE_INSENSITIVE, CMP_CASE_INSENSITIVE
I use sipsak as a smokeping-plugin. I've upgraded my server to Ubuntu LTS 22.04 and realize, sipsak test isn't working anymore.
Going deeper and using sipsak as a cli command brings me a core dump error:
URI is NUMBER@SIP-SERVER
# /usr/bin/sipsak -M -s URI
*** buffer overflow detected ***: terminated
Aborted (core dumped)
Compiled from Github-sources brings me the same error.
# /opt/sipsak/sipsak-0.9.8.1/sipsak -M -s URI
*** buffer overflow detected ***: terminated
Aborted (core dumped)
When I run the "./configure" command on CentOS 6.10, gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23) I got this error:
checking for getdomainname... yes
checking for getopt_long... yes
checking for inet_ntop... yes
checking for strncasecmp... yes
checking for strcasestr... yes
checking for syslog... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for CHECK... ./configure: line 6273: syntax error near unexpected token `else'
./configure: line 6273: `else'
This is part of the relevant content of the configure
file, with numbered lines:
1 #! /bin/sh
2 # Guess values for system-dependent variables and create Makefiles.
3 # Generated by GNU Autoconf 2.63 for sipsak 0.9.7pre.
4 #
...
...
6250
6251 if test $pkg_failed = yes; then
6252
6253 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
6254 _pkg_short_errors_supported=yes
6255 else
6256 _pkg_short_errors_supported=no
6257 fi
6258 if test $_pkg_short_errors_supported = yes; then
6259 CHECK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "check >= 0.9.3" 2>&1`
6260 else
6261 CHECK_PKG_ERRORS=`$PKG_CONFIG --print-errors "check >= 0.9.3" 2>&1`
6262 fi
6263 # Put the nasty error message in config.log where it belongs
6264 echo "$CHECK_PKG_ERRORS" >&5
6265
6266 { $as_echo "$as_me:$LINENO: result: no" >&5
6267 $as_echo "no" >&6; }
6268
6269
6270 elif test $pkg_failed = untried; then
6271
6272
6273 else
6274 CHECK_CFLAGS=$pkg_cv_CHECK_CFLAGS
6275 CHECK_LIBS=$pkg_cv_CHECK_LIBS
6276 { $as_echo "$as_me:$LINENO: result: yes" >&5
6277 $as_echo "yes" >&6; }
6278
If I manually add a no-op statement in line 6271, then the same failure happens at line 7409, being these the relevant lines:
7386
7387 if test $pkg_failed = yes; then
7388
7389 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
7390 _pkg_short_errors_supported=yes
7391 else
7392 _pkg_short_errors_supported=no
7393 fi
7394 if test $_pkg_short_errors_supported = yes; then
7395 GNUTLS319_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gnutls >= 3.1.9" 2>&1`
7396 else
7397 GNUTLS319_PKG_ERRORS=`$PKG_CONFIG --print-errors "gnutls >= 3.1.9" 2>&1`
7398 fi
7399 # Put the nasty error message in config.log where it belongs
7400 echo "$GNUTLS319_PKG_ERRORS" >&5
7401
7402 { $as_echo "$as_me:$LINENO: result: no" >&5
7403 $as_echo "no" >&6; }
7404
7405
7406 elif test $pkg_failed = untried; then
7407
7408
7409 else
7410 GNUTLS319_CFLAGS=$pkg_cv_GNUTLS319_CFLAGS
7411 GNUTLS319_LIBS=$pkg_cv_GNUTLS319_LIBS
7412 { $as_echo "$as_me:$LINENO: result: yes" >&5
7413 $as_echo "yes" >&6; }
7414
7415
7416 cat >>confdefs.h <<\_ACEOF
7417 #define HAVE_GNUTLS_319 1
7418 _ACEOF
7419
7420
7421 fi
7422
7423
What is the reason of this failure?
How can it be solved?
Thanks in advance.
The program fails to build with -fno-common (which is the default setting of gcc-10 and above).
To reproduce: add -fno-common to CFLAGS
The travis build logs on Mac are full of compiler warnings regarding sipsak usage of SSL
if we have 2 record-route in 200 ok then sipsak copied record route in the same order to route header [ wrong order ] in ack
With RAW_SUPPORT enabled, what happens is:
Sipsak opens a raw socket to listen to (any and all) ICMP messages. Every time an ICMP packet is received, the respective loop branch runs to read/parse the ICMP packet. This branch doesn't check for timeouts and won't terminate the loop. If no actual UDP response is ever received, and if there's enough ICMP traffic on the network so that select() never runs into a timeout, sipsak will continue to run forever and won't honour the requested timeout.
First attempt to verify a build against libruli bounced, because libruli is not a white listed package for container based Travis checks.
Opened travis-ci/apt-package-safelist#3326 to request adding libruli to the Travis repository.
./configure
is not possible. There is no configure script at the moment.
After update to version 0.9.8, local port in From/Via/Contact headers is set to 0, which is not compatible with some SIP services. Please, revert to filling local port even if it's not defined on command line. Example request from sipsak 0.9.8:
OPTIONS sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 158.197.160.75:0;branch=z9hG4bK.5ccef639;rport;alias
From: sip:[email protected]:0;tag=1c2eedec
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 1 OPTIONS
Contact: sip:[email protected]:0
Content-Length: 0
Max-Forwards: 70
User-Agent: sipsak 0.9.8
Accept: text/plain
Request from sipsak 0.9.7:
OPTIONS sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 158.197.160.75:38865;branch=z9hG4bK.05d91154;rport;alias
From: sip:[email protected]:38865;tag=290e7bcc
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 1 OPTIONS
Contact: sip:[email protected]:38865
Content-Length: 0
Max-Forwards: 70
User-Agent: sipsak 0.9.7
Accept: text/plain
Using --local-port parameter can workaround this, but it can make more trouble when running in parallel.
While fixing it probably should update it as well: https://github.com/kmcallister/autoharden/blob/master/configure.ac
Hi Nils,
Running test ends with errors
collect2: error: ld returned 1 exit status
make[1]: *** [tests/check_auth] Error 1
make[1]: Leaving directory `/home/olpag/down/sipsak-0.9.8.1'
make: *** [check-am] Error 2
My configuration:
Centos 7 3.10.0-1160.62.1.el7.x86_64
autoconf (GNU Autoconf) 2.69
automake (GNU automake) 1.13.4
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Compiling on macOS and FreeBSD
src/sipsak.c:158:5: error: use of undeclared identifier 'DEFAULT_TIMEOUT'
, DEFAULT_TIMEOUT
...
Fixed by moving
#ifndef DEFAULT_TIMEOUT
#define DEFAULT_TIMEOUT 5000
#endif
from src/shoot.c to src/sipsak.h
Ubuntu 14.04 LTS with sipsak from default repository
sipsak -V
sipsak 0.9.6 by Nils Ohlmeier
Copyright (C) 2002-2004 FhG Fokus
Copyright (C) 2004-2005 Nils Ohlmeier
compiled with DEFAULT_TIMEOUT=500, FQDN_SIZE=65, RAW_SUPPORT, LONG_OPTS, GNUTLS_MD5, SRV_SUPPORT(RULI), STR_CASE_INSENSITIVE, CMP_CASE_INSENSITIVE
On syslog the message appears:
sipsak: Libgcrypt warning: missing initialization - please fix the application
ii libgcrypt11:amd64 1.5.3-2ubuntu4.5 amd64 LGPL Crypto library - runtime library
Hey 😃
I just did an update of the Gentoo sipsak
package, and I'm getting some undefined reference linking issues with tests compiled (https://bugs.gentoo.org/762274).
Would you have any suggestion on how to resolve this most efficiently? Thanks!
helper.c:(.text+0x268): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0x470): undefined reference to `exit_code'
helper.c:(.text+0x622): undefined reference to `verbose'
helper.c:(.text+0x6e2): undefined reference to `exit_code'
helper.c:(.text+0x85e): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0x8f2): undefined reference to `exit_code'
helper.c:(.text+0x98c): undefined reference to `verbose'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xa03): undefined reference to `verbose'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xa58): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xa8f): undefined reference to `verbose'
helper.c:(.text+0xb8e): undefined reference to `verbose'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xc02): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xd97): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xe49): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xeb1): undefined reference to `exit_code'
helper.c:(.text+0xf82): undefined reference to `verbose'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xfe5): undefined reference to `exit_code'
helper.c:(.text+0x11dd): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0x1201): undefined reference to `exit_code'
helper.c:(.text+0x133e): undefined reference to `exit_code'
helper.c:(.text+0x13f2): undefined reference to `exit_code'
helper.c:(.text+0x1467): undefined reference to `verbose'
helper.c:(.text+0x17fd): undefined reference to `verbose'
helper.c:(.text+0x188d): undefined reference to `exit_code'
auth.c:(.text+0x160): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: auth.c:(.text+0x25c): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: auth.c:(.text+0x67f): undefined reference to `verbose'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: auth.c:(.text+0x75d): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: auth.c:(.text+0x832): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: auth.c:(.text+0xa87): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: auth.c:(.text+0xba1): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: auth.c:(.text+0xcff): undefined reference to `exit_code'
helper.c:(.text+0x622): undefined reference to `verbose'
helper.c:(.text+0x6e2): undefined reference to `exit_code'
helper.c:(.text+0x85e): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0x8f2): undefined reference to `exit_code'
helper.c:(.text+0x98c): undefined reference to `verbose'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xa03): undefined reference to `verbose'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xa58): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xa8f): undefined reference to `verbose'
helper.c:(.text+0xb8e): undefined reference to `verbose'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xc02): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xd97): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xe49): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xeb1): undefined reference to `exit_code'
helper.c:(.text+0xf82): undefined reference to `verbose'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0xfe5): undefined reference to `exit_code'
helper.c:(.text+0x11dd): undefined reference to `exit_code'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: helper.c:(.text+0x1201): undefined reference to `exit_code'
helper.c:(.text+0x133e): undefined reference to `exit_code'
helper.c:(.text+0x13f2): undefined reference to `exit_code'
helper.c:(.text+0x1467): undefined reference to `verbose'
helper.c:(.text+0x17fd): undefined reference to `verbose'
helper.c:(.text+0x188d): undefined reference to `exit_code'
collect2: error: ld returned 1 exit status
Looks like the "fingerprint of the certificate" needs to be base16 encoded:
Key Exchange: ECDHE-RSA
Peer provided 2 certificate(s)
Certificate info:
Certificate is valid since: Wed May 18 09:11:31 2022
Certificate expires: Tue Aug 16 09:11:30 2022
Certificate serial number: 0326cb1889b43bffe8283899091804e4ce6b
Certificate public key algorithm: RSA
Certificate version: #3
DN: CN=XXX
CA's signature algorithm: RSA-PSS
CA's DN: C=US,O=Let's Encrypt,CN=R3
wh�h7�T>z,CN=R3rint of the certificate: �#��>�2
Protocol: TLS1.2
See this:
Lines 445 to 447 in 0733345
I suspect that dn
needs to be base16 encoded, for instance using https://man7.org/linux/man-pages/man3/gnutls_hex_encode.3.html
if (gnutls_x509_crt_get_fingerprint(cert, GNUTLS_DIG_SHA1, dn, &size) == 0) {
gnutls_datum_t dnraw = {.data = dn, .size = size};
char dnhex[128];
size_t size = sizeof(dnhex);
// "Note that the size of the result includes the null terminator."
if (gnutls_hex_encode(&dnraw, dnhex, &size) == 0) {
printf("\tFingerprint of the certificate: %s\n", dnhex);
}
}
Issue observed with sipsak (0.9.8.1-1build1, Ubuntu/Jammy).
There is an issue with average timing calculation when running sipsak with -A parameter.
-A parameter as per sources should return min/avg/max timings.
But avg divides the sum of timings by the wrong number.
E.g. sipsak -s sip:10.0.0.1 -A 2 returns
226.149/453.273/227.124 ms
Where 453.273 is the sum of 2 requests instead of average (because it divides the sum by 1)
sipsak -s sip:10.0.0.1 -A 3 returns
222.311/333.668/222.633 ms
Where 333.668 is basically sum of requests divided by 2 (it can be proven by calculating yourself using -vv).
Hello.
I'm trying again to manually compile and install sipsak version 0.9.7pre on CentOS 6, however I'm receiving the following error:
/usr/src/sipsak-0.9.7pre/src/transport.c:458: undefined reference to `gnutls_srp_server_get_username'
collect2: ld returned 1 exit status
make[1]: *** [sipsak] Error 1
make[1]: Leaving directory `/usr/src/sipsak-0.9.7pre'
make: *** [all] Error 2
make: Leaving directory `/usr/src/sipsak-0.9.7pre'
'make -C sipsak-0.9.7pre' failed with 512.
Given that the file /usr/include/gnutls/gnutls.h provided by the gnutls-devel
package mentions the gnutls_srp_server_get_username
function, it seems to me like a linking problem, however I don't know how to solve it.
The installed version of gnutls-devel
is 2.12.23-22.
I'm attaching these files:
How could this be solved?
Thanks in advance for your time and attention.
Hi. A couple of my coworkers and I have been hacking on sipsak to add some features we need for our purposes. I've recently got it all moved up onto github and would like to spend the time to try and get these features merged upstream rather than maintain a separate fork. You can find out work here: https://github.com/sangoma/sipsak.
Code changes haven't been fully tested as at the moment we mainly use sipsak shoot support, but I'd like to round it out if there's interest:
--retrans-limit
to limit re-transmissionsA declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.