LINUX.ORG.RU

Сообщения Dronnikkl

 

Где получить дамп данных в формате NMEA с имитатора ГЛОНАСС или GPS сигналов?

Форум — Science & Engineering

Подскажите можно получить из каких-либо открытых источников дамп данных в формате NMEA с имитатора ГЛОНАСС или GPS сигналов?

Нужны именно показания приемника получавшего сигналы от имитатора, поскольку хочу сделать детектор «спуфинга» GPS/ГЛОНАСС координат в рамках дипломной работы.

Особенно важно наличие тэга $GPGSV (NMEA проткола) поскольку в нем передаются уровни сигналов от спутников - по ним можно сделать предположение о том, что сигнал эмулируется.

 ,

Dronnikkl
()

boost::asio пропадают пакеты

Форум — Development

Добрый день!

Есть сервер, написанный с помощью boost::asio, на него приходит пакеты не больше 200 байт, около 60 в минуту от 30 клиентов (gprs модемы)

После 5 минут с момента запуска часть пакетов не доходит до процесса и вообще до сервера тоесть tcpdump показывает только часть всех ожидающихся пакетов, если перезапускаю процесс то все пакеты и соединение получаю в течении первых 5 минут

strace висит на epoll_wait после первых 5 минут и иногда проходят пакеты от 1-2 клиентов

Помогите незнаю что делать и как дебажить уже. Код сервера: http://pastebin.com/qitai15m Спасибо!

 

Dronnikkl
()

Пакеты доходят до процесса с задержкой.

Форум — Development

Здравстсвуйте! Сервер (Linux Centos os, epoll), listen сокет REUSE_ADDR где-то 30 клиентов (GPRS) отсылают с переиодичностью 20 -70 секунд пакеты размером до 900 байт на сервер -> на процесс который слушает один порт с помощью epollа ->дальше в базу Алгоритм работы: клиент отсылает пакет handshake на сервер, после ответа на него сервером начинает слать пакеты данных.

Месяц все работало отлично, тут неожиданно перестало все сыпаться в базу,

Что я выснил: Все клиенты устанавливают соединение с сервером в netstat сервера появляются они в состоянии ESTABILISHED и сразу отсылает пакет - handshake - сервер успешно принимает его только через 5-15 минут! хотя если запустить tcpdump на сервер и сэмулировать отправку пакетов на этот порт то все пакеты проходят моментально.

Если ребутнуть сервер, причем после остановки дождаться закрытия всех соединений, то все работает замечательно но теперь каждые 1-3 раза в сутки происходят такие ужасные вещи о которых я написал выше.

Написано на c++ логи делаю с помощью syslog.

Помогите пожалуйста! не представляю что делать! уже неделю бьюсь и все заканчивается ребутом и моральнам унынием от безпомощности! Какие дампы нужно скинуть чтобы хотя бы понять куда копать?

Заранее огромное спасибо!

Dronnikkl
()

Epoll ESTABLISHED соединения на сервере

Форум — Development

Здравствуйте!

http://www.opennet.ru/base/dev/epoll_intro.txt.html

Собрал этом пример — сервер и клиент (tester.cpp) — все работает, но если отключить интернет на клиентской машине (где tester.cpp) то все соединения зависают на сервере:

tcp 0 0 213.239.219.253:4444 213.142.143.187:55305 ESTABLISHED tcp 0 0 213.239.219.253:4444 213.142.143.187:55304 ESTABLISHED tcp 0 0 213.239.219.253:4444 213.142.143.187:55307 ESTABLISHED tcp 0 0 213.239.219.253:4444 213.142.143.187:55306 ESTABLISHED tcp 0 0 213.239.219.253:4444 213.142.143.187:55301 ESTABLISHED tcp 0 0 213.239.219.253:4444 213.142.143.187:55300 ESTABLISHED tcp 0 0 213.239.219.253:4444 213.142.143.187:55303 ESTABLISHED …. …. Какие есть алгоритмы для закрытия таких соединений?

Спасибо!

Dronnikkl
()

Не доходят пакеты до процесса

Форум — Development

Здравствуйте!
Слушаю 5001 порт, сервер tcp на epoll,работал нормально для одного клиента в течениее двух месяцев, сейчас появилось больше и неожиданно процесс перестал принимать пакеты от клиентов (я перезагрузил его пару раз, день поробатал нормально), но при этом telnet запрос мой процесс обрабатывает и пакеты 100% отправляются, что может быть?

Заранее огромное спасибо!




# netstat -an | grep 5001
tcp 0 0 0.0.0.0:5001 0.0.0.0:* LISTEN
tcp 0 0 213.239.209.203:5001 213.87.137.123:43673 SYN_RECV
tcp 0 0 213.239.209.203:5001 213.87.128.115:53184 SYN_RECV
tcp 0 0 213.239.209.203:5001 213.87.137.123:26304 SYN_RECV
tcp 0 0 213.239.209.203:5001 213.87.137.123:62978 SYN_RECV
tcp 0 0 213.239.209.203:5001 213.87.137.123:64932 SYN_RECV
tcp 0 0 213.239.209.203:5001 213.87.128.115:9664 SYN_RECV
tcp 0 0 213.239.209.203:5001 213.87.128.115:18991 SYN_RECV

# tcpdump 'tcp port 5001' tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
03:42:31.429846 IP 115.gprs.mts.ru.65161 > CentOS-55-32-minimal.commplex-link: S 1258107402:1258107402(0) win 8096 <mss 1024>
03:42:31.429865 IP CentOS-55-32-minimal.commplex-link > 115.gprs.mts.ru.65161: S 3669344669:3669344669(0) ack 1258107403 win 5840 <mss 1460>
03:42:32.309483 IP 115.gprs.mts.ru.65161 > CentOS-55-32-minimal.commplex-link: S 1356416333:1356416333(0) win 8096 <mss 1024>
03:42:32.309493 IP CentOS-55-32-minimal.commplex-link > 115.gprs.mts.ru.65161: . ack 1 win 5840
03:42:33.339177 IP 115.gprs.mts.ru.65161 > CentOS-55-32-minimal.commplex-link: S 1356416333:1356416333(0) win 8096 <mss 1024>
03:42:33.339185 IP CentOS-55-32-minimal.commplex-link > 115.gprs.mts.ru.65161: . ack 1 win 5840
03:42:34.362306 IP 115.gprs.mts.ru.65161 > CentOS-55-32-minimal.commplex-link: S 1356416333:1356416333(0) win 8096 <mss 1024>
03:42:34.362324 IP CentOS-55-32-minimal.commplex-link > 115.gprs.mts.ru.65161: . ack 1 win 5840
03:42:35.386049 IP 115.gprs.mts.ru.65161 > CentOS-55-32-minimal.commplex-link: S 1356416333:1356416333(0) win 8096 <mss 1024>
03:42:35.386058 IP CentOS-55-32-minimal.commplex-link > 115.gprs.mts.ru.65161: . ack 1 win 5840
03:42:35.718115 IP CentOS-55-32-minimal.commplex-link > 115.gprs.mts.ru.65161: S 3669344669:3669344669(0) ack 1258107403 win 5840 <mss 1460>
03:42:37.318199 IP CentOS-55-32-minimal.commplex-link > 123.gprs.mts.ru.64932: S 3627881603:3627881603(0) ack 626772209 win 5840 <mss 1460>
03:42:37.718218 IP CentOS-55-32-minimal.commplex-link > 115.gprs.mts.ru.18991: S 3563280275:3563280275(0) ack 845747839 win 5840 <mss 1460>
03:42:41.717428 IP CentOS-55-32-minimal.commplex-link > 115.gprs.mts.ru.65161: S 3669344669:3669344669(0) ack 1258107403 win 5840 <mss 1460>

14 packets captured
14 packets received by filter
0 packets dropped by kernel

Dronnikkl
()

alsa запись в mp3

Форум — Development

Как с помощью ALSA API осуществить запись звука в формат mp3, сейчас у меня сделано только в wav формат:


#define ALSA_PCM_NEW_HW_PARAMS_API

#include <alsa/asoundlib.h>
struct wav_header {
char chunk_id[4];
unsigned int chunk_size;
char format[4];
char subchunk1_id[4];
unsigned int subchunk1_size;
unsigned short int audio_format;
unsigned short int channels;
unsigned int sample_rate;
unsigned int byte_range;
unsigned short int block_align;
unsigned short int bits_per_sample;
char subchunk2_id[4];
unsigned int subchunk2_size;
};
int main() {
  long loops;
  int rc;
  int size;
  snd_pcm_t *handle;
  snd_pcm_hw_params_t *params;
  unsigned int val;
  int dir;
  snd_pcm_uframes_t frames;
  char *buffer;
	
	
	
struct wav_header header;
FILE *output;

/* init wave header */
	struct wav_header {
		char chunk_id[4];
		unsigned int chunk_size;
		char format[4];
		char subchunk1_id[4];
		unsigned int subchunk1_size;
		unsigned short int audio_format;
		unsigned short int channels;
		unsigned int sample_rate;
		unsigned int byte_range;
		unsigned short int block_align;
		unsigned short int bits_per_sample;
		char subchunk2_id[4];
		unsigned int subchunk2_size;
	};
memcpy(header.chunk_id,"RIFF",4);
header.chunk_size = 0;
memcpy(header.format, "WAVE",4);
memcpy(header.subchunk1_id, "fmt ", 4);
header.subchunk1_size = 16;
header.audio_format = 1;
header.channels = 2;
header.sample_rate = 44100;
header.bits_per_sample = 16;
header.block_align = header.channels * header.bits_per_sample/8;
header.byte_range = header.sample_rate * header.channels *
header.bits_per_sample/8;
memcpy(header.subchunk2_id, "data", 4);
header.subchunk2_size = 0;
output = fopen("/mnt/record.wav","w+");
fwrite(&header, sizeof(struct wav_header), 1, output);
	
	
  /* Open PCM device for recording (capture). */
  rc = snd_pcm_open(&handle, "default",
                    SND_PCM_STREAM_CAPTURE, 0);
  if (rc < 0) {
    fprintf(stderr,
            "unable to open pcm device: %s\n",
            snd_strerror(rc));
    exit(1);
  }


  snd_pcm_hw_params_alloca(&params);
  snd_pcm_hw_params_any(handle, params);

  snd_pcm_hw_params_set_access(handle, params,SND_PCM_ACCESS_RW_INTERLEAVED);
  snd_pcm_hw_params_set_format(handle, params,SND_PCM_FORMAT_S16_LE);
  snd_pcm_hw_params_set_channels(handle, params, 2);
  val = 44100;
  snd_pcm_hw_params_set_rate_near(handle, params,&val, &dir);
  frames = 32;
  snd_pcm_hw_params_set_period_size_near(handle,params, &frames, &dir);
  rc = snd_pcm_hw_params(handle, params);
  if (rc < 0) {
    fprintf(stderr,
            "unable to set hw parameters: %s\n",
            snd_strerror(rc));
    exit(1);
  }
  snd_pcm_hw_params_get_period_size(params,&frames, &dir);
  size = frames * 4; /* 2 bytes/sample, 2 channels */
  buffer = (char *) malloc(size);
  /* пишем 5 секунд */
  snd_pcm_hw_params_get_period_time(params,&val, &dir);
  loops = 5000000 / val;
  snd_output_t *output_stat = NULL;
  snd_pcm_status_t *status_stat;
  rc = snd_output_stdio_attach(&output_stat, stdout, 0);
	if (rc < 0) {
		printf("Output failed: %s\n", snd_strerror(rc));
		return 0;
	}
  while (loops > 0) {
    loops--;
    rc = snd_pcm_readi(handle, buffer, frames);
    if (rc == -EPIPE) {
      /* EPIPE means overrun */
      fprintf(stderr, "overrun occurred\n");
      snd_pcm_prepare(handle);
    } else if (rc < 0) {
      fprintf(stderr,
              "error from read: %s\n",
              snd_strerror(rc));
    } else if (rc != (int)frames) {
      fprintf(stderr, "short read, read %d frames\n", rc);
    }else{
header.subchunk2_size += frames * 4;

		fwrite(buffer, frames * 4, 1, output);


}
    
  }

  snd_pcm_drain(handle);
  snd_pcm_close(handle);
/* save rest of the data */
header.chunk_size = ftell(output) - 8;
fseek(output, 0, SEEK_SET);
fwrite(&header, sizeof(struct wav_header), 1, output);
fclose(output);
printf("File %d bytes, audio length: %d samples\n",header.chunk_size,header.subchunk2_size / header.channels / (header.bits_per_sample /8)); 
 free(buffer);

  return 0;
}

Может быть мне нужен другой формат, поскольку стоит цель иметь наименьший размер файла (к микрофону подключена рация,в будющем запись будет начинаться только при открытии канала связи) Заранее спасибо!

Dronnikkl
()

alsa уровень сигнала

Форум — Development

Как с помощью ALSA API получить уровень сигнала при записи?
Необходимо активировать запись при появлении голоса на входе микрофона, возможно есть другие решения, но я вижу только одно - это задать порог уровня сигнала при превышении,которого бы активировалась запись. Заранее спасибо!

Dronnikkl
()

Два интернет провайдера

Форум — Admin

Здравствуйте!
К компьютеру подключено два интернет провайдера и локалка, при получении ip адреса в iptables появляется
Chain chain_192.168.182.3 (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere

Необходимо выбирать через какого провайдера его пускать через IP1 или IP2, причем всем дать разных провайдеров как это реализовать?
Вот доп инфа:
dev32715-IP2
eth0-IP1
tun0- локалка
#route
Destination Gateway Genmask Flags Metric Ref Use Iface
шлюздляIP1 * 255.255.255.252 U 0 0 0 eth0
шлюздляIP2 * 255.255.255.248 U 0 0 0 dev32715
192.168.182.0 * 255.255.255.0 U 0 0 0 tun0
169.254.0.0 * 255.255.0.0 U 0 0 0 dev32715
default шлюздляIP1 0.0.0.0 UG 0 0 0 eth0
При добавлении шлюза для IP2 как default из локалки в интернет не выйти,
#iptables -L

IPT=/sbin/iptables
$IPT -t nat -A POSTROUTING -o dev32715 -j MASQUARDE
$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o tun0 -j MASQUERADE
$IPT -A FORWARD -s 192.168.1.20 -j ACCEPT
$IPT -A FORWARD -d 192.168.1.20 -j ACCEPT
$IPT -A FORWARD -s 85.91.97.202 -j ACCEPT
$IPT -A FORWARD -d 85.91.97.202 -j ACCEPT
$IPT -A FORWARD -s 85.91.112.154 -j ACCEPT
$IPT -A FORWARD -d 85.91.112.154 -j ACCEPT
$IPT -A FORWARD -d 84.47.177.77 -j ACCEPT
$IPT -A FORWARD -s 84.47.177.77 -j ACCEPT
$IPT -A FORWARD -d 85.91.99.99 -j ACCEPT
$IPT -A FORWARD -s 85.91.99.99 -j ACCEPT

$IPT -P FORWARD ACCEPT

echo 1 > /proc/sys/net/ipv4/ip_forward

>>>

Dronnikkl
()

RSS подписка на новые темы