You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.3 KiB
79 lines
3.3 KiB
This document describes changes added to sipp source code.
|
|
By Guillaume Teissier from FTR&D
|
|
|
|
For unstable version 2006-02-02
|
|
Erased libnet dependencies. UDP checksum are efficiently recomputed.
|
|
It will eases Windows port by the way. The spot is now focused on a raw
|
|
socket in send_packets.c.
|
|
|
|
Starts with unstable version 2005-30-11
|
|
|
|
DESCRIPTION
|
|
Adds media replay functionnality to sipp following tcpreplay strategy.
|
|
It needs a modification of XML script: see uac.xml for an example.
|
|
When launched, a play_pcap exec action will create a pthread for sending packets.
|
|
send_packets takes as arguments:
|
|
- a file name (pcap capture file, only unidirectional RTP streams)
|
|
- an interface name (eth0 for most Linux)
|
|
- two peers description (inet_addr)
|
|
Pcap file is processed and UDP packets are replayed on a different port.
|
|
Dest port is taken as a basis for port shifting.
|
|
An example: g711a.pcap has the following output
|
|
10.1.3.43:5000 -> 10.1.6.18:2006, stands for RTP G711A pt
|
|
the line play_pcap="g711a.pcap:lo:2006" will shift every UDP packet by
|
|
dest_port (original udp dest port) - base (0 in our test case).
|
|
The advantage is that RTCP and another RTP stream should be supported
|
|
transparently.
|
|
|
|
PERFORMANCE
|
|
So far, on my DELL D410 laptop (800MHz / 1Go), it supports 500 simultaneous
|
|
media comms (only audio).
|
|
When trying with -r 90, fails when more than ~500 comms are up, a memory alloc
|
|
has failed.
|
|
Check the end of document for possible ways of enhancement
|
|
|
|
PREREQUISITES
|
|
libnet - tested with 1.1, there should be no worries about version > 1
|
|
libpcap - tested with 0.9.4
|
|
NOTE: sometimes pcap_next_ex is not compiled in libpcap, this may be useful
|
|
to check this at make time.
|
|
NOTE2: I have no idea whether it is possible or not to inject raw packets,
|
|
so it should not work on Windows.
|
|
|
|
ADDED FILES
|
|
send_packets.{h,c}: contains the thread function to send packets and export it.
|
|
The function send_packets is based on tcpreplay source code.
|
|
INDENTED with -bl -i2 options
|
|
|
|
MODIFIED FILES
|
|
Makefile: added send_packets.o, dependency for libnet and libpcap
|
|
|
|
call.hpp: added members to call class remote_ip_media (u32), remote_port_media
|
|
(u16) and media_thread (pthread_t)
|
|
call.cpp: modified call constructor to initialize added members correctly.
|
|
Added media information extracting function: get_remote_ip_media and
|
|
get_remote_port_media in method process_incomming. Launch a **light**
|
|
pthread when encounter a play_pcap action. Modified call::run method to make
|
|
action on send msg.
|
|
|
|
sipp.hpp: added global configuration variable hasMedia, default to 0
|
|
sipp.cpp: disabled RTP mirror threads. Set RTP pkts and bytes/s to correct
|
|
values (updated in send_packets.c)
|
|
|
|
scenario.cpp: set hasMedia to 1 when a tag play_pcap is encountered and set
|
|
options. Added ability to execute a command
|
|
on a send tag ( to play media when sending back ACK to uas).
|
|
|
|
actions.hpp: added a new action called play_pcap, see syntax in uac.xml
|
|
actions.cpp: modified constructor and various accessors.
|
|
|
|
sipp.dtd: added a play_pcap tag for dtd validation
|
|
|
|
ENHANCEMENTS
|
|
- Opening both pcap_t descriptor and libnet_t descriptor for each call is too
|
|
much, see if mutualisation if possible:
|
|
follow libnet_cq* check http://www.security-labs.org/index.php3?page=libnet
|
|
and libnet_ng check http://www.security-labs.org/index.php3?page=libnetng
|
|
- Processing pcap file once for all should better
|
|
- Clean up and document
|