ΠΠ°ΡΠ΅ΡΠΈΠ°Π»ΡΡ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° Π΅ Π²Π·Π΅Ρ ΠΎΡ ΠΌΠΎΡ .

ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ TShark Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° RTP ΠΏΠ°ΠΊΠ΅ΡΠΈ

Π ΠΌΠΈΠ½Π°Π»ΠΎΡΠΎ Π‘ΡΠ±ΡΠ°Π»ΠΈ ΡΠΌΠ΅ ΡΡ Π΅ΠΌΠ° Π·Π° Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ Π½Π° ΡΠΎΠ½Π°Π»Π½ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΈ, ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΡΠ΅Π· RTP ΠΏΠΎΡΠΎΠΊ.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π²ΡΠΊΠΎΠ² ΡΠΈΠ³Π½Π°Π» ΡΡΠ΅Π· RTP ΠΏΡΠΎΡΠΎΠΊΠΎΠ». ΠΡΡΠ²ΠΎ ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π» ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ ΠΈ ΡΠ΅ Π½Π°ΡΡΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°ΠΌΠ΅ RTP ΠΏΠΎΡΠΎΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ² ΡΡΠ°ΡΠΈΠΊ.
Π ΡΠ°ΠΊΠ°, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎ-ΡΡΠ½ΠΎ ΠΊΠΎΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° RTP, Π° ΠΊΠΎΠΈ Π·Π° ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ΡΠΎ, ΡΠ°Π·Π΄Π΅Π»ΡΠΌΠ΅ Π½Π°ΡΠΈΡ ΡΠ°ΠΉΠ» mstest6.c Π½Π° Π΄Π²Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ - ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π» ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ, Π° ΠΎΠ±ΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΈ Π² Π΄Π²Π΅ΡΠ΅, ΡΠ΅ ΠΈΠ·Π½Π΅ΡΠ΅ΠΌ Π² ΡΡΠ΅ΡΠΈ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ Π½Π°ΡΠ΅ΡΠ΅ΠΌ mstest_common.c, ΡΠΎΠΉ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° ΡΡΠ΅Π· Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° include:
/* Π€Π°ΠΉΠ» mstest_common.c ΠΠ±ΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊΠ° ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/msrtp.h>
#include <ortp/rtpsession.h>
#include <ortp/payloadtype.h>
define PCMU 0
/*---------------------------------------------------------*/
/* Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
Π½Π°Π³ΡΡΠ·ΠΎΠΊ. */
void register_payloads(void)
{
/* Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΡΠΈΠΏΡ Π½Π°Π³ΡΡΠ·ΠΎΠΊ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ. ΠΠΎΠ·Π΄Π½Π΅Π΅, ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π²Π·ΡΡΠΎΠΌΡ
ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° RTP-ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΠ· ΡΡΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ Π±ΡΠ΄ΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
Π½Π°Π³ΡΡΠ·ΠΊΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠ°. */
rtp_profile_set_payload (&av_profile, PCMU, &payload_type_pcm8000);
}
/*---------------------------------------------------------*/
/* ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ create_duplex_rtpsession() Π² audiostream.c ΠΌΠ΅Π΄ΠΈΠ°ΡΡΡΠΈΠΌΠ΅ΡΠ°2. */
static RtpSession *create_rtpsession (int loc_rtp_port, int loc_rtcp_port, bool_t ipv6, RtpSessionMode mode)
{
RtpSession *rtpr; rtpr = rtp_session_new ((int) mode);
rtp_session_set_scheduling_mode (rtpr, 0);
rtp_session_set_blocking_mode (rtpr, 0);
rtp_session_enable_adaptive_jitter_compensation (rtpr, TRUE);
rtp_session_set_symmetric_rtp (rtpr, TRUE);
rtp_session_set_local_addr (rtpr, ipv6 ? "::" : "0.0.0.0", loc_rtp_port, loc_rtcp_port);
rtp_session_signal_connect (rtpr, "timestamp_jump", (RtpCallback) rtp_session_resync, 0);
rtp_session_signal_connect (rtpr, "ssrc_changed", (RtpCallback) rtp_session_resync, 0);
rtp_session_set_ssrc_changed_threshold (rtpr, 0);
rtp_session_set_send_payload_type(rtpr, PCMU);
/* ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠΊΠ»ΡΡΠ°Π΅ΠΌ RTCP-ΡΠ΅ΡΡΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ ΠΏΡΠ»ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
Π΅Ρ. */
rtp_session_enable_rtcp (rtpr, FALSE);
return rtpr;
}
Π‘Π΅Π³Π° ΡΠ°ΠΉΠ»ΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈΡ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π»:
/* Π€Π°ΠΉΠ» mstest6.c ΠΠΌΠΈΡΠ°ΡΠΎΡ ΠΏΡΠ»ΡΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊΠ°). */
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/msrtp.h>
#include "mstest_common.c"
/*----------------------------------------------------------*/
int main()
{
ms_init();
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΠΈΠ»ΡΡΡΠΎΠ². */
MSFilter *voidsource = ms_filter_new(MS_VOID_SOURCE_ID);
MSFilter *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΈΠ»ΡΡΡ ΠΊΠΎΠ΄Π΅ΡΠ°. */
MSFilter *encoder = ms_filter_create_encoder("PCMU");
/* Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΡΠΈΠΏΡ Π½Π°Π³ΡΡΠ·ΠΊΠΈ. */
register_payloads();
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ RTP-ΡΠ΅ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊΠ°. */
RtpSession *tx_rtp_session = create_rtpsession (8010, 8011, FALSE, RTP_SESSION_SENDONLY);
rtp_session_set_remote_addr_and_port(tx_rtp_session,"127.0.0.1", 7010, 7011);
rtp_session_set_send_payload_type(tx_rtp_session, PCMU);
MSFilter *rtpsend = ms_filter_new(MS_RTP_SEND_ID);
ms_filter_call_method(rtpsend, MS_RTP_SEND_SET_SESSION, tx_rtp_session);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ°ΠΊΡΠΎΠ² - ΡΠΈΠΊΠ΅Ρ. */
MSTicker *ticker_tx = ms_ticker_new();
/* Π‘ΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ ΡΠΈΠ»ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊΠ°. */
ms_filter_link(voidsource, 0, dtmfgen, 0);
ms_filter_link(dtmfgen, 0, encoder, 0);
ms_filter_link(encoder, 0, rtpsend, 0);
/* ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ°ΠΊΡΠΎΠ². */
ms_ticker_attach(ticker_tx, voidsource);
/* ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ, ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π²ΡΡ
ΠΎΠ΄Π½ΡΠΌ ΡΠΈΠ³Π½Π°Π»ΠΎΠΌ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°. */
MSDtmfGenCustomTone dtmf_cfg;
dtmf_cfg.tone_name[0] = 0;
dtmf_cfg.duration = 1000;
dtmf_cfg.frequencies[0] = 440;
/* ΠΡΠ΄Π΅ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠ½, ΡΠ°ΡΡΠΎΡΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ½Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π² 0. */
dtmf_cfg.frequencies[1] = 0;
dtmf_cfg.amplitude = 1.0;
dtmf_cfg.interval = 0.;
dtmf_cfg.repeat_count = 0.;
/* ΠΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΠΌ ΡΠΈΠΊΠ» ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΠΆΠ°ΡΡΡ
ΠΊΠ»Π°Π²ΠΈΡ. ΠΠ²ΠΎΠ΄ Π½ΡΠ»Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ
* ΡΠΈΠΊΠ» ΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. */
char key='9';
printf("ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π·Π°ΡΠ΅ΠΌ Π²Π²ΠΎΠ΄.n"
"ΠΠ»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Π²Π΅Π΄ΠΈΡΠ΅ 0.n");
while(key != '0')
{
key = getchar();
if ((key >= 49) && (key <= 54))
{
printf("ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°: %cn", key);
/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ°ΡΡΠΎΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ
* ΠΊΠΎΠ΄ΠΎΠΌ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ. */
dtmf_cfg.frequencies[0] = 440 + 100*(key-49);
/* ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ Π·Π²ΡΠΊΠΎΠ²ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ c ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΎΡΠΎΠΉ. */
ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM, (void*)&dtmf_cfg);
}
/* Π£ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ ΡΡΠ΅Π΄ Π² ΡΠΏΡΡΠΊΡ Π½Π° 20ΠΌΡ, ΡΡΠΎΠ±Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄Ρ
* ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠ°Π±ΠΎΡΡ. */
ms_usleep(20000);
}
}Π Π½Π°ΠΊΡΠ°Ρ, ΡΠ°ΠΉΠ»ΡΡ Π½Π° ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°:
/* Π€Π°ΠΉΠ» mstest7.c ΠΠΌΠΈΡΠ°ΡΠΎΡ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. */
include <mediastreamer2/mssndcard.h>
include <mediastreamer2/mstonedetector.h>
include <mediastreamer2/msrtp.h>
/* ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ ΠΌΠ΅Π΄ΠΈΠ°ΡΡΡΠΈΠΌΠ΅ΡΠ°.*/
include <mediastreamer2/mseventqueue.h>
/* ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΉΠ» ΠΎΠ±ΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ. */
include "mstest_common.c"
/* Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΡΠΈΠ»ΡΡΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ Π²Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ. */
static void tone_detected_cb(void *data, MSFilter *f, unsigned int event_id,MSToneDetectorEvent *ev)
{
printf("ΠΡΠΈΠ½ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°: %sn", ev->tone_name);
}
/*----------------------------------------------------------*/
int main()
{
ms_init();
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΠΈΠ»ΡΡΡΠΎΠ². */
MSSndCard *card_playback = ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
MSFilter *snd_card_write = ms_snd_card_create_writer(card_playback);
MSFilter *detector = ms_filter_new(MS_TONE_DETECTOR_ID);
/* ΠΡΠΈΡΠ°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π²Π½ΡΡΡΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ° ΡΠΎΠ½ΠΎΠ², ΠΎΠ½ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ
* ΠΎΡΠΎΠ±ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π·ΡΡΠΊΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠΈΠ³Π½Π°Π»ΠΎΠ².*/
ms_filter_call_method(detector, MS_TONE_DETECTOR_CLEAR_SCANS, 0);
/* ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΊ ΡΠΈΠ»ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°. */
ms_filter_set_notify_callback(detector, (MSFilterNotifyFunc)tone_detected_cb, NULL);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΡ
* ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΎΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ:
Π’Π΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ
* Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΠ°ΡΡΠΎΡΠ° Π² Π³Π΅ΡΡΠ°Ρ
, Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
,
* ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ 0,775Π. */
MSToneDetectorDef scan[6]=
{
{"V+",440, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "Π£Π²Π΅Π»ΠΈΡΠΈΡΡ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ". */
{"V-",540, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "Π£ΠΌΠ΅Π½ΡΡΠΈΡΡ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ". */
{"C+",640, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "Π£Π²Π΅Π»ΠΈΡΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π°". */
{"C-",740, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "Π£ΠΌΠ΅Π½ΡΡΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π°". */
{"ON",840, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΎΡ". */
{"OFF", 940, 100, 0.1}/* ΠΠΎΠΌΠ°Π½Π΄Π° "ΠΡΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΎΡ". */
};
/* ΠΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ "ΠΏΡΠΈΠΌΠ΅ΡΡ" ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ ΡΠΎΠ½ΠΎΠ². */
int i;
for (i = 0; i < 6; i++)
{
ms_filter_call_method(detector, MS_TONE_DETECTOR_ADD_SCAN, &scan[i]);
}
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΈΠ»ΡΡΡ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠ° */
MSFilter *decoder=ms_filter_create_decoder("PCMU");
/* Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΡΠΈΠΏΡ Π½Π°Π³ΡΡΠ·ΠΊΠΈ. */
register_payloads();
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ RTP-ΡΠ΅ΡΡΠΈΡ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. */
MSFilter *rtprecv = ms_filter_new(MS_RTP_RECV_ID);
RtpSession *rx_rtp_session = create_rtpsession (7010, 7011, FALSE, RTP_SESSION_RECVONLY);
ms_filter_call_method(rtprecv, MS_RTP_RECV_SET_SESSION, rx_rtp_session);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ°ΠΊΡΠΎΠ² - ΡΠΈΠΊΠ΅Ρ. */
MSTicker *ticker_rx = ms_ticker_new();
/* Π‘ΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ ΡΠΈΠ»ΡΡΡΡ ΠΏΡΠΈΡΠΌΠ½ΠΈΠΊΠ°. */
ms_filter_link(rtprecv, 0, decoder, 0);
ms_filter_link(decoder, 0, detector, 0);
ms_filter_link(detector, 0, snd_card_write, 0);
/* ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ°ΠΊΡΠΎΠ². */
ms_ticker_attach(ticker_rx, rtprecv);
char key='9';
printf( "ΠΠ»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Π²Π΅Π΄ΠΈΡΠ΅ 0.n");
while(key != '0')
{
key = getchar();
/* Π£ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ ΡΡΠ΅Π΄ Π² ΡΠΏΡΡΠΊΡ Π½Π° 20ΠΌΡ, ΡΡΠΎΠ±Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄Ρ * ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠ°Π±ΠΎΡΡ. */
ms_usleep(20000);
}
}
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΠ΅ΠΊΠΈ Π² ΡΠ²ΠΎΡ ΠΊΠΎΠ½Π·ΠΎΠ»Π°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΠΊΡΠΎ ΠΏΡΠ΅Π΄ΠΈ - ΡΠ°ΠΌΠΎ Π²Ρ ΠΎΠ΄ΡΡ Π½Π° ΡΠΈΡΠ»Π° ΠΎΡ 1 Π΄ΠΎ 6 ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π»Ρ, Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ ΠΈΠΌ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π½Π° ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. Π Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΠ²Π°Ρ ΡΠΎΠ½ΠΎΠ²Π΅. ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ ΡΠ°ΠΊΠ°, ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π»Ρ Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° Π²ΡΡΠ·ΠΊΠ° - Π½Π°ΡΡΡΠΏΠ²Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° RTP ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π»Ρ ΠΊΡΠΌ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°.
Π‘Π΅Π³Π° Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°, Π·Π° ΡΠ΅Π»ΡΠ° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½Π·ΠΎΠ»Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΎΡΠ»ΠΈΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Wireshark - Π½Π°ΡΠΈΡΠ° ΡΠ΅ TShark. ΠΠ·Π±ΡΠ°Ρ TShark Π·Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½ΠΎΡΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π·Π° Π΄Π° ΡΠ»Π΅ΡΠ½Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. Π‘ Wireshark Π±ΠΈΡ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅Π» ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΉΠ½ΡΠΎΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π±ΠΈΡ Π° ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΠ·ΠΎ Π΄Π° ΠΎΡΡΠ°ΡΠ΅ΡΡ Ρ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° Wireshark.
ΠΠΊΠΎ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Wireshark, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π·Π° ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½Π΅ Π½Π° Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ. ΠΠΎ Π΄ΠΎΡΠΈ ΠΈ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π²ΠΈ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ Π΄Π° ΡΡΠ²ΠΎΠΈΡΠ΅ TShark, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²Π°ΡΠΈΡΠ΅ VoIP ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π·Π°Ρ Π²Π°ΡΠ°Π½Π΅ ΠΎΡΠ΄Π°Π»Π΅Ρ.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ TShark Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°:
$ sudo apt-get install tsharkΠ’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ°, Π·Π°ΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°:
$ tshark --versionΠΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π°Π΄Π΅ΠΊΠ²Π°ΡΠ΅Π½ ΠΎΡΠ³ΠΎΠ²ΠΎΡ, ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π½Π°ΠΏΡΠ΅Π΄.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π½Π°ΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΡΠ°ΠΌΠΎ Π²ΡΡΡΠ΅ Π² ΠΊΠΎΠΌΠΏΡΡΡΡΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΊΠ°ΠΆΠ΅ΠΌ tshark Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΠ°ΠΌΠΎ ΡΠ°ΠΊΠΈΠ²Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠ° ΡΠ΅Π»ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ Π·Π°Ρ Π²Π°ΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° loopback (ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°), ΠΏΡΠ΅Π΄Π°Π²Π°ΠΉΠΊΠΈ Π½Π° TShark ΠΎΠΏΡΠΈΡΡΠ° -i lo:
$ sudo tshark -i loΠ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°Ρ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅, ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½ΠΈ ΠΎΡ Π½Π°ΡΠΈΡ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π» (Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ Π½Π°ΡΠΈΡΠΊΠ°ΠΌΠ΅ Π±ΡΡΠΎΠ½Π° Π½Π° Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎΡΠΎ, ΠΈΠ»ΠΈ Π½Π΅). ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π½Π° Π²Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΡ Π΄Π° ΠΈΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ°; Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡ Π½Π°ΡΠΈΡΠ΅ ΠΈ ΡΡΠΆΠ΄ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠ° Π΄Π° ΡΠΌΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ, ΡΠ΅ Π² ΡΠΏΠΈΡΡΠΊΠ° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΠ°ΠΌΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅, ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈ ΠΎΡ Π½Π°ΡΠ΅ΡΠΎ Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎ, ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΈΠ»ΡΡΡ ΠΏΠΎ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΠΏΠΎΡΡΠ°. ΠΠ°ΡΠΈΡΠΊΠ°ΠΉΠΊΠΈ Ctrl-C, ΡΠΏΠΈΡΠ°ΠΌΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΈ Π²ΡΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΡΠΈΠ»ΡΡΡ Π½Π° Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΠΏΠΎΡΡΠ°, ΠΊΠΎΠΉΡΠΎ Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΡΠ΅Π»Π΅Π²ΠΈ ΠΏΠΎΡΡ Π·Π° ΡΠ²ΠΎΡΡΠ° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ (8010): -f "udp port 8010". Π‘Π΅Π³Π° Π½Π°ΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
$ sudo tshark -i lo -f "udp port 8010"Π ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡ Π²ΠΈΠ΄ (ΠΏΡΡΠ²ΠΈΡΠ΅ 10 ΡΠ΅Π΄Π°):
1 0.000000000 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172
2 0.020059705 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172
3 0.040044409 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172
4 0.060057104 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172
5 0.080082311 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172
6 0.100597153 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172
7 0.120122668 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172
8 0.140204789 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172
9 0.160719008 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172
10 0.180673685 127.0.0.1 β 127.0.0.1 UDP 214 8010 β 7010 Len=172ΠΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΡΠ°Π²Π° Π΄ΡΠΌΠ° Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, Π° Π·Π° Π½ΠΎΠΌΠ΅ΡΠΈΡΠ°Π½ ΡΠΏΠΈΡΡΠΊ Π½Π° ΡΡΠ±ΠΈΡΠΈΡΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠ΅Π΄ Π΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΡΠ΅Π΄Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π΅ Π±ΠΈΠ» Π·Π°Π±Π΅Π»ΡΠ·Π°Π½ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΠ΅ ΡΠΌΠ΅ ΡΠ΅ ΠΏΠΎΠ³ΡΠΈΠΆΠΈΠ»ΠΈ Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅, Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π² ΡΠΏΠΈΡΡΠΊΠ° ΡΠ°ΠΌΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π½Π° Π½Π°ΡΠΈΡ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π». Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ°Π·ΡΠΈΡΡΠΎΠ²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΠΎ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈΡΠ΅:
ΠΠΎΠΌΠ΅Ρ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ.
ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅.
IP Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈ IP Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°.
ΠΡΠΎΡΠΎΠΊΠΎΠ»ΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΊΠ°ΡΠΎ UDP, ΡΡΠΉ ΠΊΠ°ΡΠΎ RTP ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΠΊΠ°ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΡΠΎΠ²Π°Ρ Π²ΡΡΡΠ΅ Π² UDP ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅.
Π Π°Π·ΠΌΠ΅Ρ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Π² Π±Π°ΠΉΡΠΎΠ²Π΅.
ΠΠΎΠΌΠ΅Ρ Π½Π° ΠΏΠΎΡΡΠ° Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΠΏΠΎΡΡΠ° Π½Π° ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°.
Π Π°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΈΡ ΡΠΎΠ²Π°Ρ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°ΠΊΠ»ΡΡΠΈΠΌ, ΡΠ΅ Π½Π°ΡΠΈΡΡ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π» Π³Π΅Π½Π΅ΡΠΈΡΠ° RTP ΠΏΠ°ΠΊΠ΅ΡΠΈ Ρ ΡΠ°Π·ΠΌΠ΅Ρ 172 Π±Π°ΠΉΡΠ°, ΠΊΠΎΠΉΡΠΎ, ΠΊΠ°ΠΊΡΠΎ ΠΏΠ°ΡΠ΅ΡΠΎ Π² ΡΠ°Π½Π΄ΡΠΊΠ°, ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π²ΡΡΡΠ΅ Π² UDP ΠΏΠ°ΠΊΠ΅Ρ Ρ ΡΠ°Π·ΠΌΠ΅Ρ 214 Π±Π°ΠΉΡΠ°.
Π‘Π΅Π³Π° Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π² UDP ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅, Π·Π° ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ TShark Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠ»ΡΡΠΎΠ²Π΅:
sudo tshark -i lo -f "udp port 8010" -P -V -O rtp -o rtp.heuristic_rtp:TRUE -xΠ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π°, ΠΈΠ·Ρ ΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠ±ΠΎΠ³Π°ΡΠ΅Π½ β ΠΊΡΠΌ Π²ΡΡΠΊΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅ ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ ΡΠ°Π·ΡΠΈΡΡΠΎΠ²Π°Π½Π΅ Π½Π° Π²ΡΡΡΠ΅ΡΠ½ΠΎΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ Π³ΠΎ Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Π»ΠΎ. ΠΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ»ΠΈ Π΄Π° ΡΠΏΡΠ΅ΡΠ΅ TShark, ΠΊΠ°ΡΠΎ Π½Π°ΡΠΈΡΠ½Π΅ΡΠ΅ Ctrl-C, ΠΈΠ»ΠΈ Π΄Π° Π΄ΡΠ±Π»ΠΈΡΠ°ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π° ΠΌΡ Π² ΡΠ°ΠΉΠ», Π΄ΠΎΠ±Π°Π²ΡΠΉΠΊΠΈ ΠΊΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΠΊΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° tee Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π·Π° ΠΈΠΌΠ΅ Π½Π° ΡΠ°ΠΉΠ»Π°, tee :
$ sudo tshark -i lo -f "udp port 8010" -P -V -O rtp -o rtp.heuristic_rtp:TRUE -x | tee log.txtΠ‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π½Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ Π²ΡΠ² ΡΠ°ΠΉΠ»Π°, Π΅ΡΠΎ ΠΏΡΡΠ²ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΡ Π½Π΅Π³ΠΎ:
1 0.000000000 127.0.0.1 β 127.0.0.1 RTP 214 PT=ITU-T G.711 PCMU, SSRC=0x6B8B4567, Seq=58366, Time=355368720
Frame 1: 214 bytes on wire (1712 bits), 214 bytes captured (1712 bits) on interface 0
Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1User Datagram Protocol, Src Port: 8010, Dst Port: 7010
Real-Time Transport Protocol [Stream setup by HEUR RT (frame 1)]
[Setup frame: 1]
[Setup Method: HEUR RT]
10.. .... = Version: RFC 1889 Version (2)
..0. .... = Padding: False
...0 .... = Extension: False
.... 0000 = Contributing source identifiers count: 0
0... .... = Marker: False
Payload type: ITU-T G.711 PCMU (0)
Sequence number: 58366 [Extended sequence number: 58366]
Timestamp: 355368720
Synchronization Source identifier: 0x6b8b4567 (1804289383)
Payload: ffffffffffffffffffffffffffffffffffffffffffffffff...
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 00 c8 3c 69 40 00 40 11 ff b9 7f 00 00 01 7f 00 ..<i@.@.........
0020 00 01 1f 4a 1b 62 00 b4 fe c7 80 00 e3 fe 15 2e ...J.b..........
0030 7f 10 6b 8b 45 67 ff ff ff ff ff ff ff ff ff ff ..k.Eg..........
0040 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
0050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
0060 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
0070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
0080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
00c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
00d0 ff ff ff ff ff ff ......Π ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²Π΅ΡΠΈΠΌ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° Π² ΡΠΎΠ·ΠΈ Π»ΠΈΡΡΠΈΠ½Π³ ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° Π²ΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° RTP ΠΏΠ°ΠΊΠ΅ΡΠ°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
