VirtualIreland.ru - Виртуальная Ирландия
Вернуться   VirtualIreland.ru - Виртуальная Ирландия > Живем в Ирландии > IT и Связь

IT и Связь Обсуждение "айтишных" вопросов и средств связи

Ответ
 
Опции темы Опции просмотра
Старый 01.04.2009, 23:36   #1
Заслуженный Участник
 
Аватар для AlexM
 
Сообщений: 1,464
Благодарности: 52 в 30 сообщениях Поиск благодарностей AlexM
По умолчанию pipe in bash

делаю раз:
Код:
[root@v]#echo -e "GET cache_object://127.0.0.1/info HTTP/1.0\r\n\r\n"
GET cache_object://127.0.0.1/info HTTP/1.0
делаю два:
Код:
[root@v]# nc 127.0.0.1 8083
ввожу ручками:
GET cache_object://127.0.0.1/info HTTP/1.0
получаю кучу нужных буковок-цифирек от сквида.
делаю три:
Код:
[root@v]# echo -e "GET cache_object://127.0.0.1/info HTTP/1.0\r\n\r\n" | nc 127.0.0.1 8083
[root@v]#
где буковки от сквида? почему никого нет?
__________________
Lies, damn lies, and statistics.
AlexM вне форума   Ответить с цитированием

Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок
Старый 02.04.2009, 10:16   #2
Активный Участник
 
Аватар для Pav
 
Сообщений: 338
Благодарности: 165 в 91 сообщениях Поиск благодарностей Pav
По умолчанию Re: pipe in bash

почему \r and not \n\n\n ?
__________________
huge
Pav вне форума   Ответить с цитированием
Старый 02.04.2009, 13:21   #3
Заслуженный Участник
 
Аватар для Troll
 
Сообщений: 2,443
Благодарности: 838 в 444 сообщениях Поиск благодарностей Troll
По умолчанию Re: pipe in bash

фиг его знает, товарищ майор. я попробовал у себя
Цитата:
echo -e "GET cache_object://127.0.0.1/info HTTP/1.0\r\n\r\n" | nc 127.0.0.1 3128
всё прекрасно работает

это точно bash, не sh?
__________________
Ой, девоньки, вот всё, про что вы говорите — так у меня то же самое, только в сто раз больше!
Troll вне форума   Ответить с цитированием
Благодарность от:
AlexM (02.04.2009)
Старый 02.04.2009, 13:26   #4
Заслуженный Участник
 
Аватар для Troll
 
Сообщений: 2,443
Благодарности: 838 в 444 сообщениях Поиск благодарностей Troll
По умолчанию Re: pipe in bash

Цитата:
Сообщение от Pav Посмотреть сообщение
почему \r and not \n\n\n ?
RFC 2616 говорит нам, что разделителем строк в данном случае служат пары CRLF
__________________
Ой, девоньки, вот всё, про что вы говорите — так у меня то же самое, только в сто раз больше!
Troll вне форума   Ответить с цитированием
Старый 02.04.2009, 15:39   #5
Заслуженный Участник
 
Аватар для AlexM
 
Сообщений: 1,464
Благодарности: 52 в 30 сообщениях Поиск благодарностей AlexM
По умолчанию Re: pipe in bash

Цитата:
Сообщение от Troll Посмотреть сообщение
фиг его знает, товарищ майор. я попробовал у себя

всё прекрасно работает

это точно bash, не sh?
угу, точно bash
пасиб энивей....
__________________
Lies, damn lies, and statistics.
AlexM вне форума   Ответить с цитированием
Старый 02.04.2009, 15:55   #6
Заслуженный Участник
 
Аватар для Troll
 
Сообщений: 2,443
Благодарности: 838 в 444 сообщениях Поиск благодарностей Troll
По умолчанию Re: pipe in bash

а если попробовать явно написать /bin/echo ?
__________________
Ой, девоньки, вот всё, про что вы говорите — так у меня то же самое, только в сто раз больше!
Troll вне форума   Ответить с цитированием
Старый 02.04.2009, 18:45   #7
Заслуженный Участник
 
Аватар для AlexM
 
Сообщений: 1,464
Благодарности: 52 в 30 сообщениях Поиск благодарностей AlexM
По умолчанию Re: pipe in bash

Цитата:
Сообщение от Troll Посмотреть сообщение
а если попробовать явно написать /bin/echo ?
не помогло
printf тоже не помогает
__________________
Lies, damn lies, and statistics.
AlexM вне форума   Ответить с цитированием
Старый 02.04.2009, 19:57   #8
Practical UNIX Terrorist
 
Аватар для rojer
 
Откуда: bray.ie<-dub.ie<-msk.ru<-ykt.ru
Сообщений: 2,291
Благодарности: 1,257 в 647 сообщениях Поиск благодарностей rojer
По умолчанию Re: pipe in bash

AlexM, сделай

echo -e "GET cache_object://127.0.0.1/info HTTP/1.0\r\n\r\n" | strace nc 127.0.0.1 8083

и запости результат сюда, можно аттачем
__________________
Even if a billion people believe something it can still be ridiculous.
rojer вне форума   Ответить с цитированием
Старый 03.04.2009, 03:01   #9
Заслуженный Участник
 
Аватар для AlexM
 
Сообщений: 1,464
Благодарности: 52 в 30 сообщениях Поиск благодарностей AlexM
По умолчанию Re: pipe in bash

Цитата:
Сообщение от rojer Посмотреть сообщение
AlexM, сделай

echo -e "GET cache_object://127.0.0.1/info HTTP/1.0\r\n\r\n" | strace nc 127.0.0.1 8083

и запости результат сюда, можно аттачем
это мне легко
Вложения
Тип файла: txt strace.txt (3.9 Кбайт, 10 просмотров)
__________________
Lies, damn lies, and statistics.
AlexM вне форума   Ответить с цитированием
Старый 03.04.2009, 09:56   #10
Заслуженный Участник
 
Аватар для Troll
 
Сообщений: 2,443
Благодарности: 838 в 444 сообщениях Поиск благодарностей Troll
По умолчанию Re: pipe in bash

Цитата:
Сообщение от AlexM Посмотреть сообщение
это мне легко
наблюдается странная картина. строка в сокет успешно записана:
write(3, "GET cache_object://127.0.0.1/inf"..., 47) = 47

дальше nc ждет, не появилось ли чего на чтение из сокета или из stdin
poll([{fd=3, events=POLLIN}, {fd=0, events=POLLIN, revents=POLLHUP}], 2, -1) = 1

что-то появилось. дальше сокет успешно закрывается от дальнейшей записи
shutdown(3, 1 /* send */) = 0

а вот здесь меня смущает, что проверяются сразу два дескриптора, второй из которых равен -1 - заведомо несуществующий.
poll([{fd=3, events=POLLIN, revents=POLLIN|POLLHUP}, {fd=-1}], 2, -1) = 1

но вернулось оттуда 1, какой-то из дескрипторов сработал.
но вот когда nc пытается из сокета что-нибудь прочитать, нифига не читается:
read(3, "", 1024) = 0

и что самое интересное - когда потом сокет закрывается от чтения, он уже отвалился:
shutdown(3, 0 /* receive */) = -1 ENOTCONN (Transport endpoint is not connected)

фигня какая-то. у меня соответствующий кусок выглядит так:
Код:
read(0, "GET cache_object://127.0.0.1/inf"..., 8192) = 47
write(3, "GET cache_object://127.0.0.1/inf"..., 47) = 47
select(4, [0 3], NULL, NULL, NULL)      = 1 (in [0])
read(0, "", 8192)                       = 0
close(0)                                = 0
select(4, [3], NULL, NULL, NULL)        = 1 (in [3])
read(3, "HTTP/1.0 200 OK\r\nServer: squid/2"..., 8192) = 2830
write(1, "HTTP/1.0 200 OK\r\nServer: squid/2"..., 2830) = 2830
select(4, [3], NULL, NULL, NULL)        = 1 (in [3])
read(3, "", 8192)                       = 0
close(3)                                = 0
close(3)                                = -1 EBADF (Bad file descriptor)
но в целом у меня результаты strace выглядят очень сильно по-другому. в частности, второй раз select() вызывается только для одного дескриптора. у вас вообще система какая?
__________________
Ой, девоньки, вот всё, про что вы говорите — так у меня то же самое, только в сто раз больше!
Troll вне форума   Ответить с цитированием
Старый 03.04.2009, 16:24   #11
Заслуженный Участник
 
Аватар для AlexM
 
Сообщений: 1,464
Благодарности: 52 в 30 сообщениях Поиск благодарностей AlexM
По умолчанию Re: pipe in bash

Цитата:
Сообщение от Troll Посмотреть сообщение
у вас вообще система какая?
федора 8.
странно что нс работает нормально когда я ручками ему скармливаю запрос
__________________
Lies, damn lies, and statistics.
AlexM вне форума   Ответить с цитированием
Старый 03.04.2009, 16:29   #12
Practical UNIX Terrorist
 
Аватар для rojer
 
Откуда: bray.ie<-dub.ie<-msk.ru<-ykt.ru
Сообщений: 2,291
Благодарности: 1,257 в 647 сообщениях Поиск благодарностей rojer
По умолчанию Re: pipe in bash

самое интересное здесь вот что: после закрытия сокета на запись (shutdown(3, 1)) он продолжает поллиться на POLLHUP, что не есть правильно. есть мнение, что второй раз срабатывает как раз POLLHUP.

в changelog'е нетката я вижу фикс, хотя и давний. сделай nc -h и скажи какая у тебя версия нетката.

а ещё лучше дай вывод

rpm -q --whatprovides /usr/bin/nc
__________________
Even if a billion people believe something it can still be ridiculous.
rojer вне форума   Ответить с цитированием
Старый 03.04.2009, 16:58   #13
Заслуженный Участник
 
Аватар для Troll
 
Сообщений: 2,443
Благодарности: 838 в 444 сообщениях Поиск благодарностей Troll
По умолчанию Re: pipe in bash

Цитата:
Сообщение от rojer Посмотреть сообщение
самое интересное здесь вот что: после закрытия сокета на запись (shutdown(3, 1)) он продолжает поллиться на POLLHUP, что не есть правильно. есть мнение, что второй раз срабатывает как раз POLLHUP.
не-а. revents - выходной параметр. а входной - events - везде равен POLLIN.
соответственно, в первом poll сработал дескриптор 0 (revents=POLLHUP), что логично - stdin кончился, а во втором единственно возможный сокет (fd=3), причем у него случилось сразу POLLIN|POLLHUP.
но почему read не смог прочитать пришедшие данные - не понимаю.

Цитата:
Сообщение от AlexM Посмотреть сообщение
странно что нс работает нормально когда я ручками ему скармливаю запрос
принципиальная разница в том, что при скармливании ручками stdin не заканчивается после ввода строки, а при echo заканчивается
но как это влияет на чтение из сокета - ума не приложу

мне гораздо интереснее, почему у меня никаких poll'ов вообще нет, одни select'ы. nc v1.10-38
__________________
Ой, девоньки, вот всё, про что вы говорите — так у меня то же самое, только в сто раз больше!

Последний раз редактировалось Troll, 03.04.2009 в 17:04.
Troll вне форума   Ответить с цитированием

Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок
Старый 03.04.2009, 17:27   #14
Practical UNIX Terrorist
 
Аватар для rojer
 
Откуда: bray.ie<-dub.ie<-msk.ru<-ykt.ru
Сообщений: 2,291
Благодарности: 1,257 в 647 сообщениях Поиск благодарностей rojer
По умолчанию Re: pipe in bash

Troll, да, ты прав.
а вот такое предположение - может сквид паникует и когда видит аналог POLLHUP на своей стороне (поскольку мы закрыли коннект), просто дропает его, не отвечая?
потому что у себя на 9-й федоре я вижу аналогичное поведение - после revents=POLLIN|POLLHUP read() возвращает 0. то есть POLLIN|POLLHUP это ядро говорит что сокет закрыт с той стороны, нифига там больше нет.
конечно, у меня разница в том что перед этим есть 2 полноценных revents=POLLIN и один POLLIN|POLLHUP с остатками ответа.
может виноват сквид? как насчёт параллельного tcpdump -n -i lo -X -s 16384 port 8083? показывает что-нибудь?

Troll, что касается select/poll - у тебя что за система? 1.10 - это старый неткат, м.б. он тогда ещё юзал селект?
UPD: да, неткат перешёл с селекта на полл в версии 1.21. 8 лет назад. пора тебе апгрейдиться
netcat.c 1.20 vs 1.21
__________________
Even if a billion people believe something it can still be ridiculous.

Последний раз редактировалось rojer, 03.04.2009 в 17:40.
rojer вне форума   Ответить с цитированием
Старый 03.04.2009, 18:59   #15
Заслуженный Участник
 
Аватар для Troll
 
Сообщений: 2,443
Благодарности: 838 в 444 сообщениях Поиск благодарностей Troll
По умолчанию Re: pipe in bash

Цитата:
Сообщение от Troll Посмотреть сообщение
а вот такое предположение - может сквид паникует и когда видит аналог POLLHUP на своей стороне (поскольку мы закрыли коннект), просто дропает его, не отвечая?
если я что-нибудь понимаю в сокетах, то это чисто локальная операция, с другой стороны tcp-соединения этого вообще не видно

Цитата:
Сообщение от rojer Посмотреть сообщение
Troll, что касается select/poll - у тебя что за система? 1.10 - это старый неткат, м.б. он тогда ещё юзал селект?
UPD: да, неткат перешёл с селекта на полл в версии 1.21. 8 лет назад. пора тебе апгрейдиться
убунта 8.10 с последними апдейтами. natcat 1.10 - последний имеющийся оригинальный, он с 1996 года и не менялся. 1.21 - это отдельный OpenBSD'шный форк, он в дебиане отдельным пакетом идет - netcat-openbsd.
__________________
Ой, девоньки, вот всё, про что вы говорите — так у меня то же самое, только в сто раз больше!

Последний раз редактировалось Troll, 03.04.2009 в 19:08.
Troll вне форума   Ответить с цитированием
Ответ



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать на сообщения
Вы не можете добавлять вложения
Вы не можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщ.
bash history AlexM IT и Связь 14 27.11.2006 18:56
bash.org Mikhael Само приползло 2 02.04.2006 22:35


Часовой пояс GMT, времени сейчас: 10:11.


vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd., Русификация: zCarot, Vovan & Co
©2003-2025 VirtualIreland.ru - Виртуальная Ирландия