eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: cppasm, Tupis (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Вопрос по сокета
Посл.ответ Сообщение

Ранг: 7.1 (гость)
Статус: Участник

Создано: 12 сентября 2016 10:56 New!
Цитата · Личное сообщение · #1

Всем привет.
Есть непонимание почему происходит следующее:
1. Есть вэб-сервер (банальный апач, но это не важно). Он нормально пингуется.
2. Есть дллка которая грузиться руками и из которой происходит взаимодействие с этим серверорм.
3. На Вин 8+ (вне зависимости от разряности все хоккей). На Вин 7 - то работает то не (то есть коннект, то нет, то шлет то нет, то тянет данные то нет).

Код тривиален. Есть неблокирующий сокет и для ожидания используется селект.
Пример (кусок коннекта, сенд ресив по такой же аналогии)

invoke connect, lpSocket, lpName, dwNameLen
mov RetStatus, eax
invoke WSAGetLastError

.if RetStatus == SOCKET_ERROR && eax == WSAEWOULDBLOCK
FDZERO fdWrite
FDZERO fdErr
FDSET lpSocket, fdWrite
FDSET lpSocket, fdErr

m2m Timeout.tv_sec, dwTimeout
m2m Timeout.tv_usec, 0

invoke select, 0, 0, addr fdWrite, addr fdErr, addr Timeout
.if eax != 0
invoke __WSAFDIsSet, lpSocket, addr fdWrite
.if eax != 0
m2m RetStatus, 0
.endif

invoke __WSAFDIsSet, lpSocket, addr fdErr
.if eax != 0
m2m RetStatus, SOCKET_ERROR
.endif
.endif
.endif

select - вываливается с 0 (timeout) что крайне странно.
Причем если тот же код вынести в exe/dll и дергать гетпрок или просто через линковку (те в exe в импорте будут) - то везде ок.

Оттебажил через виндбг и до проваливания в ядро все ок. Но может я что упустил.
Если подскажете в чем может быть дело и куда копать (вдруг кто сталкивался) - буду признателен.

Ранг: 4.0 (гость)
Статус: Участник

Создано: 12 сентября 2016 16:21 New!
Цитата · Личное сообщение · #2

там же NULL должен быть указатель на timeout для select , чтобы он встал в ожидание?
я не знаю что это за язык, и воспринимает ли он 0 как NULL, но может есть возможность вместо timeout написать просто NULL и попробовать?

Ранг: 7.1 (гость)
Статус: Участник

Создано: 12 сентября 2016 16:25 New!
Цитата · Личное сообщение · #3

Williams
Эм... это ассемблер. Остальное не распарсил) чтобы встал на ожидание должен быть передан ук-ль на структуру, что присутствует. Все по мсдн.


Ранг: 655.1 (! !)
Статус: Участник
CyberMonk

Создано: 12 сентября 2016 22:28 New!
Цитата · Личное сообщение · #4

--> Link <--

| Сообщение посчитали полезным: plutos


Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 10:12 New!
Цитата · Личное сообщение · #5

mak
все это прочитано. если бы гугл знал, я бы сюда не отписал. правила форума я читал.


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 10:28 New!
Цитата · Личное сообщение · #6

таймаут коннекта истек, оно не смогло соедениться
проблема видимо не в коде а в политиках виндовс, фаервол итд

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 11:14 New!
Цитата · Личное сообщение · #7

reversecode
thnx, думал об этом. но как-то не придумал как может влиять.
еще момент. воспроизводся так - без впн работает, с впн нет, но браузеры тянут ок. wget тоже. если задержка то секунда может. тоже не думаю что код, так как все по мсдн в плане кода.


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 11:23 · Поправил: 14 сентября 2016 11:24 reversecode New!
Цитата · Личное сообщение · #8

тот же процесс хакер показывает что происходит с тцп коннектами
можно поиграться с ваершарком на локальной машине по интерфейсу
проблема может быть и с той стороны на впн сервере, банальный tcp mss fix, хотя он и проявляется по другому,
но а вдруг

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 11:28 New!
Цитата · Личное сообщение · #9

reversecode
в ваершарке вижу норм тсп хэндшейк без впн, с впном его не увидишь - там все в туннель заворачивается. возможно ты и прав что дропаются какие-то пакеты. но черт побери как вгет то тянет без проблем...


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 11:35 New!
Цитата · Личное сообщение · #10

ваершарк разве интерфеса тунеля не видит ? до того как оно в тунель заходит ?

вгет конектится и тянет с того же айпи что и длл ? тогда вам и карты в руки
возможно там какая то опция на сокете стоит

Добавлено спустя 0 минут
а может таймаут маленький на селекте ?
ну вообщем все карты у вас

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 11:43 · Поправил: 14 сентября 2016 11:47 superakira New!
Цитата · Личное сообщение · #11

reversecode
видит что в туннел летит) на разделить проблемотично.
по вгету - именно так, с той же машины, но впном тянет норм. какая опция сокета может на это влиять - ума не приложу.

На селекте для коннекта 10 секунда, для сенда 20, для ресива 30 =) я не скупился

Добавлено спустя 4 минуты
И еще напомню, что писал выше
Причем если тот же код вынести в exe/dll и дергать гетпрок или просто через линковку (те в exe в импорте будут) - то везде ок.


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 11:50 New!
Цитата · Личное сообщение · #12

tcp no delay например итд
там их хватает

еще может быть bind перед коннектом для того что бы пакеты уходили с определенного айпи(интерфейса)
а не со случайного если bind сделать на 0.0.0.0

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

Добавлено спустя 1 минуту
а если цгет скомпилить в длл и вынести в гет прок и дергать ?)))

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 11:56 New!
Цитата · Личное сообщение · #13

reversecode
на счет вгет - не вариант, но хотелось бы. В процессе ничего не биндиться, только шлеться (связка коннект-сенд-ресив-дисконнект). было бы не странно - я бы не писал)
еще вопрос - может ли как-то влиять то что длл загружена руками?

Добавлено спустя 0 минут
на счет флагов попробую.


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 11:57 New!
Цитата · Личное сообщение · #14

то что не биндится неправильно, сбиндите перед коннектом на какой то айпи
а то может у вас там интерфейсов много и оно уходит с какого то левого плутая ?

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

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 12:04 New!
Цитата · Личное сообщение · #15

О_о я просто всегда думал, что бинд для серверной части и не где не читал, что могут быть такие наводки


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 12:08 New!
Цитата · Личное сообщение · #16

бинд говорит с какого айпи будут уходить пакеты
если бинда нет то с первого доступного интерфейса
если у вас их много(интерфейсов), то пакет может уходить не оттуда откуда ожидается

Добавлено спустя 3 минуты
таблицы роутинга в принципе все это поправляют, но бывают ситуации

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 12:13 · Поправил: 14 сентября 2016 12:14 superakira New!
Цитата · Личное сообщение · #17

гуглю читаю, но грех не спросить - как лучше биндить? 0.0.0.0 или свой ип? какой порт - по идее без конфликтов же надо.


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 12:17 New!
Цитата · Личное сообщение · #18

чувствую посоветовал глупость,
интерфейс у вас один ? тогда нет смысла биндить

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 12:20 · Поправил: 14 сентября 2016 12:20 superakira New!
Цитата · Личное сообщение · #19

на виртуалке их несколько + впн. все равно проверю. варианты то уже почти все перебрал


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 12:23 New!
Цитата · Личное сообщение · #20

ну почему почти все, еще остается сбилдить вгет и запихать в длл

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 12:25 New!
Цитата · Личное сообщение · #21

размер. он критичен. так бы я на асио все написал и не парился.


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 12:26 New!
Цитата · Личное сообщение · #22

сейчас важен не размер а проблема которая связана с тем что это в длл, если и вгет нагнется в длл
что тогда делать ?

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 12:33 · Поправил: 14 сентября 2016 12:34 superakira New!
Цитата · Личное сообщение · #23

думаешь надо прикрутить вгет код? ну честно говоря я уже все перепробовал и мне не кажется это странной идеей)

Добавлено спустя 1 минуту
посмотрел вайршарком. исходящий интерфейс всегда одинаков (с впн и без до проваливания в туннель) - так что по идее бинд не нужен.


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 14 сентября 2016 12:36 · Поправил: 14 сентября 2016 12:36 reversecode New!
Цитата · Личное сообщение · #24

есть вгет оспаривать корректность которого смысла нет, так ?
значит если он не будет работать в длл,значит какая то политика винды
если будет работать в длл, значит копать дальше код

Ранг: 7.1 (гость)
Статус: Участник

Создано: 14 сентября 2016 12:40 New!
Цитата · Личное сообщение · #25

стянул код вгета. читаю. думаю ты прав, спасибо. отпишу результат - чтоб потомкам было проще)

Ранг: 7.1 (гость)
Статус: Участник

Создано: 15 сентября 2016 16:52 New!
Цитата · Личное сообщение · #26

reversecode
забавно, но код вгета отработал. я не оформлял в виде длл или либы, просто рипнул код котрый мне был нужен. там просто написано. перегнал в асм и прикрутил к себе. все хоккей. они работают с блокирующими сокетами и по хитрому обрабатывают коннект (в отдельном потоке), сенд ресив на селектах (но чуть по другому). в общем кто бы мог подумать, что с неблокирующими такой плавающий баг. и это поведение только на 7. на 8+ все хоккей. такие дела.


Ранг: 1013.4 (!!!!)
Статус: Участник

Создано: 15 сентября 2016 17:08 · Поправил: 15 сентября 2016 17:18 reversecode New!
Цитата · Личное сообщение · #27

кода мы не видели, поэтому верим наслово
очевидно в нем недоработки, просто разные потоки, ничего нового привнести не могли
да и если бы на винде 7 были такие глюки, они бы уже стали всем известны

Ранг: 7.1 (гость)
Статус: Участник

Создано: 15 сентября 2016 17:21 New!
Цитата · Личное сообщение · #28

reversecode
да он простой как 5 копеек. запостить код не могу =( но в любом случае спасибо.
 eXeL@B —› Программирование —› Вопрос по сокета

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS