x64 asm Подключение winsocket2 Connect () - PullRequest
0 голосов
/ 27 августа 2018

Я создал базовый инструмент на C #, который открывает оболочку bind для моего Сервера. Допустим, IP-адрес 192.168.0.101 и порт 9500.

Моя цель - перенаправить трафик с инструмента C # на мой второй сервер, допустим, он находится на 192.168.0.102 и использует тот же порт.

Чтобы получить то, что я хочу, я попытался подключить функцию ws2_32.dll "WSAConnect". Добавил отладчик в C #, установил точку останова на функции, и в конце концов я обнаружил, что RDX содержит «sockaddr», который указывает на то, что я хочу изменить.

Первые 2 байта - это 0x02 0x00, что означает использование ipv4. Вторые 2 - это мой порт в гексе, а следующие 4 - мой IP в гексе. Оттуда я изменил эти байты, чтобы получить то, что я хочу, и заставил программу продолжить.

Чтобы проверить, работает ли я, я использовал «Контроль исходного кода» из «Диспетчера задач» и посмотрел на свое приложение на C #. Оттуда я увидел TCP-соединение, которое подключалось не к моему первому серверу, а ко второму серверу, что было именно тем, что я хотел.

Но после просмотра обоих серверов я не увидел входящих соединений. Через некоторое время соединение с «Source Control» пропало, там, где также пока не отправляются пакеты.

Как случилось, что мое соединение не началось? Я что-то упустил из виду?

1 Ответ

0 голосов
/ 13 мая 2019

После долгого времени я наконец нашел ответ. Получается, что все было правильно, но мне пришлось подождать, прежде чем отправлять мой первый пакет. Соединение еще не было создано, и мой send () не удалось. Таким образом, я закончил делать Send (), проверить WSAGetLastError () и повторять, пока это не будет выполнено (Конечно, я добавил тайм-аут в этот цикл, чтобы избежать инф-цикла)

...