LINUX.ORG.RU

Сообщения BreadFan

 

Снова флуд в Dev

Форум — Linux-org-ru
BreadFan
()

Снесите чтоли

Форум — Linux-org-ru
BreadFan
()

select и non-blocking fifo

Форум — Development

Вот возникли непонятки с сабжем:
Создаю fifo, открываю его с параметром O_RDONLY | O_NONBLOCK, вызываю на него select, все ок. 
После того, как другой процесс пишет 1 байт в этот fifo, select завершается и я вычитываю этот байт из fifo. 
Однако при следующем вызове select, fifo снова становится готовым на чтение, хотя данные в него никто больше не писал. 
Почему такое может быть? 

Код:
    for (;;)
    {
        FD_ZERO(&fds);

        FD_SET(fifo, &fds);
        fd_max = MAX(fifo, fd_max);
...
/* добавляем еще дескрипторы: 2 пайпа и 1 сокет */
...
        if (select(fd_max + 1, &fds, 0, 0, 0) < 0)
        {
            if (errno != EINTR)
                err(1, "select");
        }
...
/* обрабатываем готовность других дескрипторов на чтение */
...

        if (FD_ISSET(fifo, &fds))
        {
            while (read(fifo, &i, 1) == 1)
            ; /* empty non-blocking fifo */

            some_func();
            continue;
        }
    }
BreadFan
()

Про миранду: 2Shaman007 и сочувствующим

Форум — Talks

Надеюсь, это не сочтут за офтоп:

Помнится, Shaman007 несколько раз говорил, что ICQ-клиент Miranda - образец того как не надо делать софт, но внятного ответа на вопрос "почему" я так и не нашел (может просто плохо искал...). Почему?
Она open source, в инсталляторе-минимальная функциональность, все остальное достигается обвешиванием плагинами. Тому, кому не нравится искать плагины - пожалуйте, есть сборки миранды, сделанные энтузиастами. Мне такая модель разработки напоминает Firefox.

Пожалуйста, те, кто в теме, поругайте миранду, может я чего-то не понимаю :)

BreadFan
()

bind: чего-то я не догоняю...

Форум — Development

вот смотрите - в "Программировании сетевых приложений" Стивенса написано следующее:
A process can bind a specific IP address to its socket... For TCP server it restricts the socket to receive incoming client connections destined only to that IP address.

ОК, пишем такой код:
struct sockaddr_in servaddr;
...
inet_aton("192.168.134.178", &servaddr.sin_addr);
servaddr.sin_port = htons(5113);
bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

Компилируем, запускаем:
$ netstat -pla | grep 5113
tcp 0 0 192.168.134.178:5113 *:* LISTEN 27451/a.out
То есть как будто бы прибиндился нормально, больше никто не слушает порт 5113.

На машине несколько карточек:
eth0 с IP 192.168.133.178
eth1 с IP 192.168.134.178 (разница в 3 октете)

Делаем с этой машины коннект на себя:
telnet 192.168.133.178 5113 - connection refused
telnet 192.168.134.178 5113 - connection ok

А теперь фокус:
Винда, IP адрес 192.168.133.200, коннектимся к 192.168.133.178 (туда, где нас должны отшить) и получаем соединение!
$ netstat -pla | grep 5113
tcp 0 0 192.168.134.178:5113 *:* LISTEN 27451/a.out
tcp 0 0 192.168.134.178:5113 192.168.133.200:1149 TIME_WAIT -

Вот вывод tcpdump:
$ sudo tcpdump -nn host 192.168.133.178 and port 5113
12:38:00.752076 IP 192.168.133.200.1127 > 192.168.133.178.5113: S 2609228336:2609228336(0) win 65535 <mss 1460,nop,nop,sackOK>
12:38:00.752281 IP 192.168.133.178.5113 > 192.168.133.200.1127: S 754062038:754062038(0) ack 2609228337 win 5840 <mss 1460,nop,nop,sackOK>
12:38:00.752505 IP 192.168.133.200.1127 > 192.168.133.178.5113: . ack 1 win 65535
12:38:00.752613 IP 192.168.133.178.5113 > 192.168.133.200.1127: P 1:27(26) ack 1 win 5840
12:38:00.752624 IP 192.168.133.178.5113 > 192.168.133.200.1127: F 27:27(0) ack 1 win 5840
12:38:00.752955 IP 192.168.133.200.1127 > 192.168.133.178.5113: . ack 28 win 65509
12:38:00.756327 IP 192.168.133.200.1127 > 192.168.133.178.5113: F 1:1(0) ack 28 win 65509
12:38:00.756343 IP 192.168.133.178.5113 > 192.168.133.200.1127: . ack 2 win 5840

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


Кто нибудь может мне объяснить происходящее? :)

BreadFan
()

netfilter

Форум — Development

Привет.

Я столкнулся с такой задачей:
1. фильтровать входящие пакеты: все TCP пакеты на порт 9999 пропускать, остальные, например, молча дропать
2. у всех входящих TCP-пакетов на порт 9999 сохранять ip.src, tcp.src и ip.dst в таблицу1, после чего подменить ip.dst на свой IP (эти пакеты предназначались не нам :))
3. В юзерспейсе подхватываем эти соединения с помощью accept, создаем новое соединение на original dst (из таблицы1) и порт 9999. из полученных 2 сокетов заполняем таблицу2: original ip.src, tcp.src - new ip.src, tcp.src.
4. У всех исходящих пакетов на порт 9999 смотреть IP.src, искать по нему в таблице2 original IP.src, и подменять ip.dst на original IP.dst из таблицы 1.

Как я понял, с этим со всем отлично справляются netfilter в ядре и lipiptс в user-space. С lipiptc вроде все понятно, а по поводу программирования ядерного модуля в netfilter-hacking-howto - какая-то каша. Немногочисленные примеры кода меня только запутали :(

Посему вопрос:
1. есть ли смысл писать код в kernel-space: все равно какая-то информация (инфа для таблиц 1 и 2) будет передаваться в userspace. Нагрузка на интерфейс - около 50 килопакетов в секунду.
2. если ответ на п.2 - "да", то есть ли где-нибудь "пошаговое" руководство где все подробно разжевано про программирование с netfilter в ядре?

P.S.: Не пинайте сильно, я в этой области еще не очень силен.
P.P.S.: Да, я организую man-in-the-middle атаку :)

BreadFan
()

Чего мне не хватает в Gajim

Форум — Desktop

Привет,

Есть некоторые соображения по поводу того, что мне не хватает в Gajim. Вполне вероятно, что все это в нем есть, просто я лопух :)
1. Нет нормального механизма цитирования. Чтобы процитировать собеседника необходимо копировать его реплику, ставить символ > и вставлять выделенное. к тому же цитируемый текст не подсвечивается
2. Нотификации работают по-странному: сообщение от пользователя появляется во всплывающем окне только тогда, когда он пишет тебе первый раз. Как настроить чтобы и все последующие собщения дублировались в попапе - не нашел.
3. Нельзя посмотреть инфу о человеке, которого нет в твоем контакт-листе.
4. Нельзя скрыть отключенных только в одной группе.

Прав ли я, либо все это как-то можно настроить?
Спасибо.

BreadFan
()

Торвальдс в вики-цитатнике

Форум — Talks

Как-то от нечего делать решил перевести некоторые цитаты (те, которые осилил с первого взгляда на английский текст). Результат можете увидеть здесь: http://ru.wikiquote.org/wiki/Линус_Торвальдс

Только вот за месяц существования эту статью правили только боты. Предлагаю присоединиться к переводу и/или к исправлению! :)

BreadFan
()

Вопрос нижегородским пользователям Linux

Форум — Talks

Вопрос нижегородским пользователям Linux: а есть ли среди вас добрая душа, готовая за пиво нарезать две Ubuntu DVD edition (в идеале 1 DVD для i386 и 1 для amd64) до новогодних праздников? Пара знакомых, не видевшие доселе Linux, хотят познать Счастие.

BreadFan
()

Перехват TCP-соединения

Форум — Development

Я тут озадачился перехватом TCP соединений.
Исходные данные: Linux-машина с сетевым интерфейсом, слушающим зеркалируемый порт свича + 1 интерфейс для того, чтобы посылать сгенерированные пакеты в сеть.
На первом интерфейсе мы ловим TCP пакеты с сегментом SYN, сразу как только такой пакет приходит, отсылаем SYN,ACK "якобы от получателя" в сеть. Сразу после этого шлем RST настоящему получателю пакета. После чего связываемся с настоящим получателем. Принцип именно в том, чтобы "встать в середину". Проблема в том, что получатель не реагирует на наш RST и шлет свой SYN,ACK. Вот вывод ethereal:
3 2.857378 192.168.133.200 -> 192.168.132.6 TCP 2410 > http [SYN] Seq=0 Ack=0 Win=65535 Len=0 MSS=1460 - перехваченный SYN
4 2.857455 192.168.132.6 -> 192.168.133.200 TCP http > 2410 [SYN, ACK] Seq=0 Ack=1 Win=1500 Len=0 - поддельный SYN,ACK
5 2.857463 192.168.133.200 -> 192.168.132.6 TCP [TCP keep alive] 2410 > http [RST] Seq=16777216 Ack=656072754 Win=1500 Len=0 - наш RST, который неправильно интерпретируется
6 2.857796 192.168.132.6 -> 192.168.133.200 TCP http > 2410 [SYN, ACK] Seq=0 Ack=1 Win=1500 Len=0 - а вот и ответ от сервера

Вопрос: как правильно "отменить" посылку SYN?

BreadFan
()

Не могу слинковаться с glib2

Форум — Development

Что-то я совсем туплю... при компиляции dsniff вылазит бестолковая ошибка:
gcc -o dsniff asn1.o <skipped> decode_x11.o -lnsl -lrpcsvc -L. -lmissing -lnids -L/usr/lib -lpcap -L/usr/lib -lnet -lresolv -L/usr/lib -ldb -L/usr/lib -lssl -lcrypto

/usr/lib/gcc/x86_64-redhat-linux/3.4.2/../../../../lib64/libnids.a(libnids.o)(.t ext+0x4c8): In function `nids_dispatch':
: undefined reference to `g_async_queue_push'
<skipped>

подсовывал в строку линковки и -lglib и lglib2 - ничего не помогает:
/usr/bin/ld: cannot find -lglib

Помогите, плиз!

$ uname -a
Linux 2.6.15 #9 SMP Wed Nov 8 22:14:22 MSK 2006 x86_64 x86_64 x86_64 GNU/Linux

$ rpm -qa | grep glib[-2]
glib-1.2.10-15
glib2-2.4.7-1
dbus-glib-0.22-10
glib-1.2.10-15
glib2-2.4.7-1
dbus-glib-0.22-10

BreadFan
()

Непонятки с libnet

Форум — Development

В продолжение темы http://www.linux.org.ru/jump-message.jsp?msgid=1630134

Я написал следующий код:
/* Создаем ethernet кадр */
libnet_build_ethernet("\x00\x17\x31\x97\x0D\xC5", "\x00\x17\x31\x97\x0D\xC3", ETHERTYPE_IP, NULL, 0, buf);

/* Создаем ip пакет */
libnet_build_ip(TCP_H + 8, 0, libnet_get_prand(PRu16), 0, 64, IPPROTO_TCP, 3232269768, 3232269767, NULL, 0, buf + ETH_H);

/* Создаем tcp пакет без payload, но с зарезервированными для него 8 байтами */
libnet_build_tcp(1010, 8080, 100, 300, TH_SYN, 6553, 0, NULL, 8, buf + ETH_H + IP_H);

/* Считаем чексумму для IP */
libnet_do_checksum(buf + ETH_H, IPPROTO_TCP, TCP_H + 1);


После этого дампим это в pcap-файл
Все бы ничего, но есть пара проблем:
1. Контрольная сумма IP пакета == 0 (хотя функция исполняется успешно)
2. bogus TCP header length (0, must be at least 20)

Кто-нить сталкивался с таким?
$ strings /usr/lib/libnet.a | grep version
libnet version 1.0.2a (c) 1998, 1999 Mike D. Schiffman <mike@infonexus.com>

BreadFan
()

Шрифты в опере

Форум — Desktop

Поставил тут оперу у себя в кубунте 6.06 - загрузил википедию и чуть не офигел: вся разметка съезжает из-за дефолтовых настроек оперных шрифтов.

msttcorefonts ставил

Не могли бы вы поделиться кусочком конфига оперы ~/.opera/opera6.ini: секция [Fonts]

Может кто-нибудь еще что нибудь путное посоветует?

BreadFan
()

Merge tool

Форум — Talks

Кто какие утилиты для merge использует? Есть ли такие, которые показывают различия в строке посимвольно: по типу araxis merge под винду?

http://img212.imageshack.us/img212/6747/araxiswx5.jpg

BreadFan
()

Warning in gcc

Форум — Development

Есть такой код:

#include <string.h>
#include <stdlib.h>

int main()
{
   char* str;
   strcpy(str, "1234567890");

   return (EXIT_SUCCESS);
}

~$ gcc -Wall 1.c 
# нагло молчит. 

Почему он не показал warning? Ведь память никак не выделена?
Скокмпилированный код работает как ни в чем не бывало.

П.С.:
~$ gcc --version
gcc (GCC) 3.3.1 (SuSE Linux)

П.П.С:
баян?
BreadFan
()

ОПРОС: Как вы произносите «awk»?

Форум — Talks

1. аок

2. афк

3. а-вэ-ка

4. свой вариант

BreadFan
()

Вопрос по printf сотоварищи

Форум — Development

Подскажите, пожалуйста, как реализовать на чистом С:

В С-строку :) нужно забить дату в виде hh:mm. Есть переменные long для часов и минут. Если часы или минуты меньше 10, то нужно выводить что-то типа 09:08. Разумеется, используя if(), сделать это не составит труда, но наверное можно использовать флаги sprintf и записать все в одну строку? К манам, плиз, не отправляйте. читал я их, да и дело срочное.

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

BreadFan
()

Ламерский вопрос по GIMP

Форум — Desktop

Прошу прощения за ламерский вопрос. Суть его в следующем:

как нужно использовать инструмент "Умные ножницы" чтобы снять выделение. Я выделяю замкнутый контур, хочу скопировать, а он копирует картинку целиком. Т.е. он не заменяет выделенный контур на "настоящее" выделение.

Спасибо заранее

BreadFan
()

RedHat на VM Ware: установка новых шрифтов.

Форум — General

После установки RH 8.0 на vmware столкнулся с такой проблемой: шрифты, даже те, которые шли в rpm не видятся в системе. Путь к шрифтам вроде правильно прописан в конфиге xfs, файлы fonts.dir есть, но xfontsel говорит, что таких шрифтов нет. Никак не пойму почему!!! Такая фигня уже на второй вирт. машине проявляется. На реальных тачках все окей... Что посоветуете?

BreadFan
()

Отправка почты из командной строки

Форум — General

Кто-нибудь знает как отправить почту С АТТАЧЕМ из командной строки. Насколько я знаю, mail'ом просто так этого не сделаешь.

Мне это надо потому что возникла необходимость отправлять менеджеру загзипованные логи тестов.

BreadFan
()

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