LINUX.ORG.RU

Сообщения lunc

 

Системный C++/Linux программист (удаленная)

Форум — Job

Ищу разработчика на разовый high-load проект в области обработки сетевого трафика.

Обязательные требования:
+ Хороший C++, желательно знание Boost (asio, threads);
+ Опыт разработки высоконагруженных серверов (pthreads, epoll, socket API);
+ Владение oprofile, valgrind, gdb, scons
+ Хороший coding style (linux/Documentation/CodingStyle, FreeBSD KNF etc);

Желательно:
+ Знание атомарных операций, lock-free структуры данных;
+ Опыт работы с Cisco RDRv1;
+ Английский язык.

Работа удаленная, ежедневные статус-митинги по Skype.


+7 (916) 717-3899
e-mail: ak домен natsys-lab.com
Skype: akrizh

Александр.

lunc
()

На какую зарплату можно найти студента в Москве?

Форум — Job

Привет!

Хочу найти студента-программиста толкового: на хорошем уровне Linux/UNIX и C. Плюсом C++, Perl и базовые знания администритрования.

Интересует только Москва.

До этого еще никого не принимал на работу и сейчас интересует на какие деньги такой человек может работать? Сколько обычно просит народ на полную занятость и на пол ставки ?

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

>>>

lunc
()

Проблема с кодировками при ssh X-форвардинге

Форум — General

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

Есть проблемма с русскими кодировками при X-форвардинге: ssh клиент RHEL, сервер AIX 5.3.

Выставляю ISO-8859-5 как кодировку для X-ов на линуксе (через i18n), запускаю гуевое приложение на AIX с кодировками (ISO для него по умолчанию) -- приложение запускается и нормально работоает.

Это гуевое приложение вызывает программу, кторая делает некоторые манипуляции с кодировками и очень хочет иметь на входе UTF-8. Ok, выстваляю в линуксе UTF-8 -- Х работает нормально (русские символы показываются нормально, могу создавать файлы с русскими именами). На AIX в /etc/environment выстывляю LANG=RU_RU.UTF-8 (эта локаль есть в locale -a), консоль через ssh работает нормально с русскими символами. Запускаю это гуевое приложение и получаю примерно следующее: очень долгое подвисание и в конце вот такое:

Cannot create fontset
Cannot create fontset
Cannot load fonts for IMF.
Cannot create fontset

Смотрел через truss -- она просто подвыисает на UNIX сокете -- в общем, что происходит не понятно....

Может подскажет кто-нибудь что с этим можно сделать? Или хотя бы, где не хватает фонтов на моем линуксе или на AIX?
lunc
()

утилита копирования бинарных файлов

Форум — General

Привет!

Кто-нибудь знает утилиту ктороая может:
1) сливать (конкатенировать) бинарые файлы (cat f1 f2 > f3) дает не то, что было на входе.
2) делать seek'и (если надо пропустить какое-нибудь большое простое число байт, прйдетс указать для dd читать по 1 байту -- будет очень медлено).
3) естественно, иметь возможность копировать только часть файла.

lunc
()

Что делать с браузером?

Форум — General

На работе есть on-line тренинги -- разнообразыне веб-приложения. Проблема в том, что они требуют Internet Explorer (звук в Firefox 1.5 не воспроизводится, JavaScript генерит кучу ошибок).

Пути, видимо, два: 1) Поставить wine (или еще какую приблуду) и на него IЕ. Есть сомнения, что IE взростет на wine... 2) Использовать какой-то другой IE совместимый браузер -- какой?

Посоветуйте, плз.

lunc
()

smbmount: 20381: session request to *SMBSERVER failed (Not listening for calling name)

Форум — Admin

Привет!

Целый день гуглил и читал доки -- решения не нашел.
Проблема в следующем: пытаюсь замонтироваться к удаленной Windows машине, сам я на RHEL 4. Получаю следующие ошибки:

[root@moscow lunc]# smbmount //WIN_SERVER_FQDN/directory /mnt/ -o username=my_username/WORKGROUP
19990: session request to WIN_SERVER.DOMEN failed (Not listening for calling name)
19990: session request to WIN_SERVER failed (Not listening for calling name)
19990: session request to *SMBSERVER failed (Not listening for calling name)
SMB connection failed

Я могу полукапить этот сервер. То есть, вроде бы фаерволы здесь ни при чем (эта машина находится в другой стране и доступа я к ней не имею):

[root@moscow lunc]# nmblookup -A WIN_SERVER_FQDN
Looking up status of 1.1.1.1
        WIN_SERVER         <00> -         M <ACTIVE>
        WIN_SERVER         <03> -         M <ACTIVE>
        WIN_SERVER         <20> -         M <ACTIVE>
        WORKGROUP       <00> - <GROUP> M <ACTIVE>
        WORKGROUP       <1e> - <GROUP> M <ACTIVE>
        MAC Address = 00-00-00-00-00-00

В чем грабли могут быть? Я могу выложить свои конфиги и дебажные выводы самбовских утилит. Вот пока для smbmount:

[root@moscow lunc]# smbmount //WIN_SERVER_FQDN/directory /mnt/ -o username=my_username/WORKGROUP,debug=6
mount.smbfs started (version 3.0.10-1.4E.6)
added interface ip=2.2.2.2 bcast=1.1.1.127 nmask=255.255.255.128
Opening cache file at /var/cache/samba/gencache.tdb
name WIN_SERVER_FQDN#20 found.
Connecting to 1.1.1.1 at port 445
error connecting to 1.1.1.1:445 (Connection refused)
Connecting to 1.1.1.1 at port 139
socket option SO_KEEPALIVE = 0
socket option SO_REUSEADDR = 0
socket option SO_BROADCAST = 0
socket option TCP_NODELAY = 1
socket option IPTOS_LOWDELAY = 0
socket option IPTOS_THROUGHPUT = 0
socket option SO_SNDBUF = 16384
socket option SO_RCVBUF = 16384
socket option SO_SNDLOWAT = 1
socket option SO_RCVLOWAT = 1
socket option SO_SNDTIMEO = 0
socket option SO_RCVTIMEO = 0
write_socket(4,72)
write_socket(4,72) wrote 72
Sent session request
size=1
smb_com=0x0
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=0
smb_flg2=0
smb_tid=0
smb_pid=0
smb_uid=0
smb_mid=0
smt_wct=0
smb_bcc=0
17912: session request to WIN_SERVER.DOMEN failed (Not listening for calling name)
name WIN_SERVER_FQDN#20 found.
Connecting to 1.1.1.1 at port 445
error connecting to 1.1.1.1:445 (Connection refused)
Connecting to 1.1.1.1 at port 139
socket option SO_KEEPALIVE = 0
socket option SO_REUSEADDR = 0
socket option SO_BROADCAST = 0
socket option TCP_NODELAY = 1
socket option IPTOS_LOWDELAY = 0
socket option IPTOS_THROUGHPUT = 0
socket option SO_SNDBUF = 16384
socket option SO_RCVBUF = 16384
socket option SO_SNDLOWAT = 1
socket option SO_RCVLOWAT = 1
socket option SO_SNDTIMEO = 0
socket option SO_RCVTIMEO = 0
write_socket(4,72)
write_socket(4,72) wrote 72
Sent session request
size=1
smb_com=0x0
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=0
smb_flg2=0
smb_tid=0
smb_pid=0
smb_uid=0
smb_mid=0
smt_wct=0
smb_bcc=0
17912: session request to WIN_SERVER failed (Not listening for calling name)
name WIN_SERVER_FQDN#20 found.
Connecting to 1.1.1.1 at port 445
error connecting to 1.1.1.1:445 (Connection refused)
Connecting to 1.1.1.1 at port 139
socket option SO_KEEPALIVE = 0
socket option SO_REUSEADDR = 0
socket option SO_BROADCAST = 0
socket option TCP_NODELAY = 1
socket option IPTOS_LOWDELAY = 0
socket option IPTOS_THROUGHPUT = 0
socket option SO_SNDBUF = 16384
socket option SO_RCVBUF = 16384
socket option SO_SNDLOWAT = 1
socket option SO_RCVLOWAT = 1
socket option SO_SNDTIMEO = 0
socket option SO_RCVTIMEO = 0
write_socket(4,72)
write_socket(4,72) wrote 72
Sent session request
size=1
smb_com=0x0
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=0
smb_flg2=0
smb_tid=0
smb_pid=0
smb_uid=0
smb_mid=0
smt_wct=0
smb_bcc=0
17912: session request to *SMBSERVER failed (Not listening for calling name)
SMB connection failed
lunc
()

ssh тунелинг

Форум — Security

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

Подскажите, плз, чего я недопонимаю. Смотрю здесь: http://www.ssh.com/support/documentation/online/ssh/adminguide/32/Port_Forwar... -- вроде все делаю правильно... Хочу настроить тунелинг для HTTP между двумя машинами (linux и freebsd соответственно) через ssh.

Делаю это следующим образом:

linux@lunc:~$ ssh -2 -L 1234:localhost:6661 lunc@freebsd freebsd@lunc|~$

после этого Firefox'ом на linux делаю запрос: "http://localhost:1234/". Через tcpdump вижу, что между клиентом и сервером ничего не шифруется:

linux@root# tcpdump -X -s 128 -v port 6661 ........ 19:47:07.980462 IP (tos 0x0, ttl 64, id 62776, offset 0, flags [DF], proto: TCP (6), length: 738) linux.58163 > freebsd.6661: P 1:699(698) ack 1 win 5840 0x0000: 4500 02e2 f538 4000 4006 fb98 d5b4 da5d E....8@.@......] 0x0010: d5b4 c17d e333 1a05 c10f d1c5 157f a1e0 ...}.3.......... 0x0020: 5018 16d0 9695 0000 4745 5420 2f69 6d61 P.......GET./ima 0x0030: 6765 732f 6172 722d 622e 6769 6620 4854 ges/arr-b.gif.HT 0x0040: 5450 2f31 2e31 0d0a 486f 7374 3a20 6172 TP/1.1..Host:.ar 0x0050: 632e 7961 6e64 6578 2e72 753a 3636 3631 c.yandex.ru:6661 0x0060: 0d0a 5573 6572 2d41 6765 6e74 3a20 4d6f ..User-Agent:.Mo

Вот, что показывает ntstat: linux@root# netstat -ap --tcp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 localhost:1234 *:* LISTEN 10890/ssh tcp 0 0 localhost:44995 localhost:1234 ESTABLISHED 4210/firefox-bin tcp 0 0 localhost:1234 localhost:44995 ESTABLISHED 10890/ssh tcp 0 0 linux:58163 freebsd:6661 ESTABLISHED 4210/firefox-bin tcp 0 0 linux:50027 freebsd:ssh ESTABLISHED 10890/ssh

lunc
()

оптимизация регулярных выражений

Форум — Development

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

Нужно мне свои регулярные выражения заимплементить, но проблемма в том, что приложение критично к памяти и скорости. Соответственно полные матрицы переходов размера N*m (N -- мощность алфавита, m -- длина шаблона) не устраивают.

Возможна ли компиляция регекспов (составление матрицы переходов для DFA) сразу для нескольких паттернов? Матрица переходов получается разреженной -- возможно ли ее эффективное сжатие (без существенной потери перформанса)?

Очень нужны _конкретные_ советы и ссылки на материалы по оптимизации регекспов. В гугле ничего по существу не нашел (по методам реализации движков для регекспов). Смотрю glibc -- пока не особо понятно...

lunc
()

полезность сигнатурных IDS

Форум — Security

Разбираюсь сейчас со снортом -- смотрю его сигнатуры, исходники.

И стал мне не понятен его смысл использования именно как host based IDS. Посмотреть, например, его стандартный набор правил smtp.rules. Если у меня есть smtp-сервер, уязвимый для атак описаных в сигнатурах, то почему не пофиксить эти уязвимости? А отслеживать разные сканирования, tiny fragments и пр. -- imho никчему...

Или кто-то его использует?? Просвятите, plz.

lunc
()

Обработка данных между TCP/IP стеком и драйвером

Форум — Development

Не могу понять как заполняется структура sk_buff для пришедших пакетов (соответственно и как ее парсить, особенно это касается пля sk_buff->data -- что в ней лежит?) для Linux 2.2.20 и 2.4.6.

Так понимаю, все происходит следующим образом: приходит прерывание от карточки, вызывается хендлер прерывания pcnet32_interrupt (для драйвера pcnet32.c), от туда завется pcnet32_rx и там через bus_to_virt (так понимаю прямо с PCI шины) данные копируются в sk_buff (вместе с ethernet хедером???). Далее, по идее, должен вызываться netif_rx из dev.c, а от туда уже ip_rcv. Но этих двух переходов я найти не могу.

Ткните носом, плз :) Заранее, спасибо!

lunc
()

STL и аллокация памяти, Linux 2.4.22, g++ 3.2.2

Форум — Development

Проблеммный код:

#include <string.h> #include <string> #include <vector>

int main () { MEM_DEBUG_ON;

{ char test[1024]; memset (test, 'a', 1023); test[1023]=0; std::vector<std::string> vec; for (int i=0; i<10; i++) { std::string s1(test); vec.push_back(s1); }

vec.clear(); }

MEM_DEBUG_OFF;

return 0; }

Код дебаггера памяти:

#include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <fcntl.h>

#define MAX_MALLOCS 10000 #define RES_FILE "./mem_allocs_stat"

/* Prototypes for our hooks. */ static void my_init_hook(void); static void *my_malloc_hook(size_t, const void *); static void my_free_hook(void *ptr, const void *caller);

static unsigned long mem_count; static unsigned int addr_hash[MAX_MALLOCS][2]; static unsigned int hash_number; FILE * f; /* Variables to save original hooks. */ static void *(*old_malloc_hook)(size_t, const void *); static void (*old_free_hook)(void *ptr, const void *caller);

/* Override initialising hook from the C library. */ void (*__malloc_initialize_hook) (void) = my_init_hook; static void * my_malloc_hook (size_t size, const void *caller) { void *result; __malloc_hook = old_malloc_hook; result = malloc (size);

int i; for (i=0; i<MAX_MALLOCS; i++) { if ( !addr_hash[i][0] ) { addr_hash[i][0] = (unsigned)result; addr_hash[i][1] = size; break; } } if (i<MAX_MALLOCS) hash_number++; else fprintf (f, "WARNING: too much mallocs\n"); old_malloc_hook = __malloc_hook; fprintf (f, "malloc(%u) called from %p returns %p0\n", (unsigned int) size, caller, result); __malloc_hook = my_malloc_hook; return result; }

static void my_free_hook (void *ptr, const void *caller) { __free_hook = old_free_hook; free(ptr);

int i; for (i=0; i<hash_number; i++) { if (addr_hash[i][0] == (unsigned)ptr) { addr_hash[i][0] = 0; } } if (i==hash_number-1) hash_number--;

old_free_hook = __free_hook; fprintf (f, "free(%p0) called form %p\n", ptr, caller); __free_hook = my_free_hook; }

static void print_result () { for (int i=0; i<hash_number; i++) if ( addr_hash[i][0] ) { fprintf (f, "\t0x%x %d bytes\n", addr_hash[i][0], addr_hash[i][1]); mem_count += addr_hash[i][1]; } fprintf (f, "memory allocation result: %u\n", mem_count);

fclose (f); }

#define MEM_DEBUG_ON mem_debug_activate()

#define MEM_DEBUG_OFF \ __malloc_hook = old_malloc_hook; \ __free_hook = old_free_hook

static void mem_debug_activate () { #ifdef DEBUG f = fopen(RES_FILE, "w+");

if ( !!atexit(print_result) ) exit(-1);

old_malloc_hook = __malloc_hook; __malloc_hook = my_malloc_hook;

old_free_hook = __free_hook; __free_hook = my_free_hook;

#endif }

Собственно просто смотрим выделение памяти.

Вывод дебаггера

[lunc@kain temp]$ cat mem_allocs_stat 0 malloc(1136) called from 0x400b2e9e returns 0x805efe80 // выделение памяти для строки 1 malloc(320) called from 0x400b2e9e returns 0x805f4600 // ???? 2 malloc(1136) called from 0x400b2e9e returns 0x805f5a80 3 malloc(1136) called from 0x400b2e9e returns 0x805fa200 4 malloc(1136) called from 0x400b2e9e returns 0x805fe980 5 malloc(1136) called from 0x400b2e9e returns 0x80603100 6 malloc(1304) called from 0x400b2e9e returns 0x80607880 // ???? 7 malloc(1136) called from 0x400b2e9e returns 0x8060ca80 8 malloc(1136) called from 0x400b2e9e returns 0x80611200 9 malloc(1136) called from 0x400b2e9e returns 0x80615980 10 malloc(1136) called from 0x400b2e9e returns 0x8061a100 11 malloc(1136) called from 0x400b2e9e returns 0x8061e880 free(0x805efe80) called form 0x400b1983 free(0x805f5a80) called form 0x400b1983 free(0x805fa200) called form 0x400b1983 free(0x805fe980) called form 0x400b1983 free(0x80603100) called form 0x400b1983 free(0x8060ca80) called form 0x400b1983 free(0x80611200) called form 0x400b1983 free(0x80615980) called form 0x400b1983 free(0x8061a100) called form 0x400b1983 free(0x8061e880) called form 0x400b1983

Итого потреянно 1624 байта. Если сделать около 100 итреаций получится порядка 7Kb (добавляется еще одна аллокация, которая потом не освобождается). Такое поведение возникает только при использовании push_back() (если создать вектор заранее с заданным размером, а потом пихать в него элементы -- память освободится полностью). С list та же история -- только аллокации другие.

Может быть я не правильно хуки поставил. Использовал mtrace: Цитата

@ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x805f0b0 0x470 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x805f528 0x140 // 320 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x805f670 0x470 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x805fae8 0x470 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x805ff60 0x470 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x80603d8 0x470 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x8060850 0x518 // 1304 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x8060d70 0x470 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x80611e8 0x470 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x8061660 0x470 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x8061ad8 0x470 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b2e9e] + 0x8061f50 0x470 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x805f0b0 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x805f670 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x805fae8 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x805ff60 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x80603d8 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x8060d70 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x80611e8 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x8061660 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x8061ad8 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b1983] - 0x8061f50

Та же самая память...

В чем дело?

lunc
()

В чем отличае Linux от UNIX

Форум — General

Вообщем то у меня бы и не возникло желания до всего этого докапываться, лично мне пофиг как правильно называется ОС, с которой я работаю UNIX или Linux. Но сегодня возник спор: утверждалось, что RH - не UNIX, FreeBSD - UNIX, при том UNIX - торговая марка. Докапаться как следует я не успел - пара кончилась

С моей стороны утверждалось, что UNIX - все что удовлетворяет POSIX - ладно, с этим разобрался: "Unix is a trademark, owned by SCO (IIRC). AT&T Developed Unix, then sold it to SCO a few years ago. Bellcore had nothing to do with Unix. Posix is a common set of APIs/commands that define a "minimum" OS environment, that would allow a program written to it to be simply recompiled on a new platform that supported POSIX and run as expected. POSIX is *quite* limited. WinNT3.51 and up have been POSIX compliant. POSIX <> Unix."

В чем так сильно (и главное принципиально) различается Debiam Linux от FreeBSD и чем так похож Solaris на FreeBSD, что говорится, что Linux - это не UNIX, а Solaris и FreeBSD - UNIX. Я юзал эти ОС (немног, но все же) и на пальцах знаю их различая, но не могу понять в чем ПРИНЦИПИАЛЬНАЯ разница?

SCO купила торговую марку UNIX, но конкретной ОС c названием "UNIX" нет (у SCO UnixWare).

Я называю UNIX'ом и Linux тоже и не вижу (пока) объективной причины, почему это не верно.

Просьба предоставлять КОНКРЕТНЫЕ ПРИНЦИПИАЛЬНЫЕ различая во внутреннем устройстве систем.

Заранее спасибо.

lunc
()

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