Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2018, 21:20   #1
sashok_2005
Пользователь
 
Регистрация: 26.03.2017
Сообщений: 11
Злость Недо arp спуфинг

И снова здрасте. И у меня новая проблема написал код (в будущем типа для arp спуфинга)
Код:
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include <cstdlib>
#include <string>

using namespace std;

typedef struct ARPHeader
{
    unsigned short arp_htype;
    unsigned short arp_ptype;
    unsigned char  arp_hlen;
    unsigned char  arp_plen;
    unsigned short arp_oper;
    char* arp_addr;
};

char smac[] = "43:43:43:43:b3:43";
char sip[] = "192.168.1.1";
char dmac[] = "42:43:23:a3:43:43";
char dip[] = "192.168.1.51";

void arr_div(string result[], char arr[], char div){ //Вспомагательная функция
    int c1 = 0;
    int c2 = 0;
    char buf[100];
    ZeroMemory(buf, sizeof(buf));
    for(int i = 0; i < strlen(arr) + 1; i++){
        if(arr[i] == div | arr[i] == '\0'){
            result[c1] = (string) buf;
            c1++;
            ZeroMemory(buf, sizeof(buf));
            c2 = 0;
        }else{
            buf[c2] = arr[i];
            c2++;
        }
    }
}

void iptoch(char res[5], char ip[]){ //В res[] записывает ip в виде char
    string arr[4];
    arr_div(arr, ip, '.');
    for(int i = 0; i < 4; i++){
        res[i] = atoi(arr[i].c_str());
    }
    res[4] = '\0';
}

void mactoch(char res[7], char mac[]){ //То же самое как и iptoch только для mac
    string arr[6];
    arr_div(arr, mac, ':');
    for(int i = 0; i < 6; i++){
        res[i] = static_cast<char>(strtoul(arr[i].c_str(), 0, 16));
    }
    res[6] = '\0';
}

int main(){
    WSAData ws;
    WSAStartup(MAKEWORD(2,2), &ws);
    SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
    BOOL opt = TRUE;
    setsockopt(sock, SOL_SOCKET, IP_HDRINCL, (char*) &opt, sizeof(opt));
    ARPHeader arp;
    arp.arp_htype = 0x0001;
    arp.arp_ptype = 0x0800;
    arp.arp_hlen = 0x06;
    arp.arp_plen = 0x04;
    arp.arp_oper = 0x0002;
    char addr[20];
    ZeroMemory(addr, sizeof(addr));
    char sha[7];
    char spa[5];
    char tha[7];
    char tpa[5];
    mactoch(sha, smac);
    iptoch(spa, sip);
    mactoch(tha, dmac);
    iptoch(tpa, dip);
    strcat(addr, sha);
    strcat(addr, spa);
    strcat(addr, tha);
    strcat(addr, tpa);
    arp.arp_addr = addr;
    sockaddr_in address;
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = inet_addr("192.168.1.51");
    sendto(sock, (char*) &arp, sizeof(arp), 0, (SOCKADDR*) &address, sizeof(address));
    WSACleanup();
    return 0;
}
Не маленький и не большой.
В общем ошибок никаких не выдаёт но вот что выходит в wireshark
Во первых там IPv4, а по сути должен быть arp.
А во вторых пусть там и IPv4 но после него идут вообще не те данные
В общем HELP ME PLEASE

А и ещё пример брал с вот этого сайта http://blagin.ru/raw-sokety-winsocket-c/.
Но там пакеты в wireshark вообще не видны.
Изображения
Тип файла: png spoof.png (22.0 Кб, 137 просмотров)
sashok_2005 вне форума Ответить с цитированием
Старый 11.09.2018, 00:27   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от sashok_2005 Посмотреть сообщение
SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
Где здесь видите ARP?
waleri вне форума Ответить с цитированием
Старый 11.09.2018, 16:17   #3
sashok_2005
Пользователь
 
Регистрация: 26.03.2017
Сообщений: 11
По умолчанию

Ну типа я думаю вместо ip заголовка можно поставить arp заголовок
sashok_2005 вне форума Ответить с цитированием
Старый 11.09.2018, 16:50   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от sashok_2005 Посмотреть сообщение
можно поставить arp
Нельзя.
RAW сокеты только для IP или ICMP протоколов.
ARP несколько ниже.
waleri вне форума Ответить с цитированием
Старый 11.09.2018, 17:00   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

waleri
А если так?
SOCKET sock = socket(AF_UNSPEC, SOCK_RAW, 0);

Цитата:
Сообщение от waleri Посмотреть сообщение
Нельзя.
RAW сокеты только для IP или ICMP протоколов.
ARP несколько ниже.
Это не корректно.
https://docs.microsoft.com/en-us/win...insock2-socket

sashok_2005
В целях информационной безопасности сырые сокеты всячески ограничивают в возможностях. Мало того что зависят от типа пользователя: пользователь/суперпользователь, так ещё есть блокировка на запись, а чтение может быть доступно.
Если хотите иметь полный доступ то можно слать через PCAP.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 11.09.2018, 17:32   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
SOCKET sock = socket(AF_UNSPEC, SOCK_RAW, 0);
Флаг вам в руки...
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
недо-MDI приложение, дочерние формы, «шеф все пропало..» impeee Общие вопросы Delphi 3 24.09.2013 18:22
Недо-фриланс dubailand Свободное общение 14 30.12.2011 11:02
ARP vova65 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.12.2011 14:01
arp-спуфинг Romeo Ordos Работа с сетью в Delphi 5 30.10.2008 10:18
Реализовать такую тему как в винде ( arp -a ), получить ARP таблицу APOSTOL Работа с сетью в Delphi 3 07.06.2007 12:15