Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Raw socket, отправка пакетов 
V
    Опции темы
Alexey68
Дата 27.7.2015, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Hi All.
При попытке отослать пакет на роутер (192.168.0.1), от него приходит ответ: ICMP:Destination Unreachable Message, а если отослать пакет на компьютер  (в лок. сети 192.168.0.53), то тишина.... ОС xp sp3. Трафик смотрю Ms network monitor. Программа отрабатывает без ошибки. 
Вот код (чужой):
Код

... заголовочные файлы
#define MAX_PACKET_SIZE    0x10000
 
typedef struct ip_hdr
{
unsigned char ip_header_len:4; // 4-bit header length (in 32-bit words) normally=5 (Means 20 Bytes may be 24 also)
unsigned char ip_version :4; // 4-bit IPv4 version
unsigned char ip_tos; // IP type of service
unsigned short ip_total_length; // Total length
unsigned short ip_id; // Unique identifier
 
unsigned char ip_frag_offset :5; // Fragment offset field
 
unsigned char ip_more_fragment :1;
unsigned char ip_dont_fragment :1;
unsigned char ip_reserved_zero :1;
 
unsigned char ip_frag_offset1; //fragment offset
 
unsigned char ip_ttl; // Time to live
unsigned char ip_protocol; // Protocol(TCP,UDP etc)
unsigned short ip_checksum; // IP checksum
unsigned int ip_srcaddr; // Source address
unsigned int ip_destaddr; // Source address
} IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;
 
// TCP header
typedef struct tcp_header
{
unsigned short source_port; // source port
unsigned short dest_port; // destination port
unsigned int sequence; // sequence number - 32 bits
unsigned int acknowledge; // acknowledgement number - 32 bits
 
unsigned char ns :1; //Nonce Sum Flag Added in RFC 3540.
unsigned char reserved_part1:3; //according to rfc
unsigned char data_offset:4; /*The number of 32-bit words in the TCP header.
This indicates where the data begins.
The length of the TCP header is always a multiple
of 32 bits.*/
 
unsigned char fin :1; //Finish Flag
unsigned char syn :1; //Synchronise Flag
unsigned char rst :1; //Reset Flag
unsigned char psh :1; //Push Flag
unsigned char ack :1; //Acknowledgement Flag
unsigned char urg :1; //Urgent Flag
 
unsigned char ecn :1; //ECN-Echo Flag
unsigned char cwr :1; //Congestion Window Reduced Flag
 
////////////////////////////////
 
unsigned short window; // window
unsigned short checksum; // checksum
unsigned short urgent_pointer; // urgent pointer
} TCP_HDR , *PTCP_HDR , FAR * LPTCP_HDR , TCPHeader , TCP_HEADER;
 
int main()
{
char host[100],buf[1000],*data=NULL,source_ip[20]; //buf is the complete packet
SOCKET s;
int k=1;
 
IPV4_HDR *v4hdr=NULL;
TCP_HDR *tcphdr=NULL;
 
int payload= 0 , optval;
SOCKADDR_IN dest;
hostent *server;
 
//Initialise Winsock
WSADATA wsock;
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2),&wsock) != 0)
{
fprintf(stderr,"WSAStartup() failed");
exit(EXIT_FAILURE);
}
printf("Initialised successfully.");
////////////////////////////////////////////////

//Create Raw TCP Packet
printf("\nCreating Raw TCP Socket...");
if((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))==SOCKET_ERROR)
{
printf("Creation of raw socket failed.");
return 0;
}
printf("Raw TCP Socket Created successfully.");
////////////////////////////////////////////////
 
//Put Socket in RAW Mode.
printf("\nSetting the socket in RAW mode...");
if(setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&optval, sizeof(optval))==SOCKET_ERROR)
{
printf("failed to set socket in raw mode.");
return 0;
}
printf("Successful.");
////////////////////////////////////////////////
 
//Target Hostname
printf("\nEnter hostname : ");
gets(host);
printf("\nResolving Hostname...");
if((server=gethostbyname(host))==0)
{
printf("Unable to resolve.");
return 0;
}
dest.sin_family = AF_INET;
dest.sin_port = htons(80); //your destination port
memcpy(&dest.sin_addr.s_addr,server->h_addr,server->h_length);
printf("Resolved.");
/////////////////////////////////////////////////
 
printf("\nEnter Source IP : ");
gets(source_ip);
 
v4hdr = (IPV4_HDR *)buf; //lets point to the ip header portion
v4hdr->ip_version=4;
v4hdr->ip_header_len=5;
v4hdr->ip_tos = 0;
v4hdr->ip_total_length = htons ( sizeof(IPV4_HDR) + sizeof(TCP_HDR) + payload );
v4hdr->ip_id = htons(2);
v4hdr->ip_frag_offset = 0;
v4hdr->ip_frag_offset1 = 0;
v4hdr->ip_reserved_zero = 0;
v4hdr->ip_dont_fragment = 1;
v4hdr->ip_more_fragment = 0;
v4hdr->ip_ttl = 8;
//IPPROTO_ICMP
//v4hdr->ip_protocol = IPPROTO_TCP;
v4hdr->ip_protocol = IPPROTO_UDP;
v4hdr->ip_srcaddr = inet_addr(source_ip);
v4hdr->ip_destaddr = inet_addr(inet_ntoa(dest.sin_addr));
v4hdr->ip_checksum = 0;
 
tcphdr = (TCP_HDR *)&buf[sizeof(IPV4_HDR)]; //get the pointer to the tcp header in the packet
 
tcphdr->source_port = htons(1180);
tcphdr->dest_port = htons(80);

tcphdr->cwr=0;
tcphdr->ecn=0;
tcphdr->urg=0;
tcphdr->ack=1;
tcphdr->psh=0;
tcphdr->rst=1;
tcphdr->syn=0;
tcphdr->fin=0;
tcphdr->ns=1;
 
tcphdr->checksum = 0;
 
// Initialize the TCP payload to some rubbish
data = &buf[sizeof(IPV4_HDR) + sizeof(TCP_HDR)];
memset(data, '^', payload);
 
printf("\nSending packet...\n");

if((sendto(s , buf , sizeof(IPV4_HDR)+sizeof(TCP_HDR) + payload, 0,
(SOCKADDR *)&dest, sizeof(dest)))==SOCKET_ERROR)
{
printf("Error sending Packet : %d",WSAGetLastError());
printf("\n\n\n\nDone\n");
    getchar();
return 0;
}

Прошу Вашей помощи.

Это сообщение отредактировал(а) Alexey68 - 27.7.2015, 17:07
PM MAIL   Вверх
feodorv
Дата 28.7.2015, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2213
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  27.7.2015,  17:06 Найти цитируемый пост)
Программа отрабатывает без ошибки. 

Вы, собственно, сформированный отправляемый пакет разбирали по винтику? Сравнивали, например, с тем, что порождает команда
Код
telnet 192.168.0.1 80
???


Цитата(Alexey68 @  27.7.2015,  17:06 Найти цитируемый пост)
memcpy(&dest.sin_addr.s_addr,server->h_addr,server->h_length);
Где проверка remoteHost->h_addrtype на AF_INET (иначе h_length будет не такой, какой Вы её ожидали).


Цитата(Alexey68 @  27.7.2015,  17:06 Найти цитируемый пост)
tcphdr->checksum = 0;
Настолько сложно посчитать контрольную сумму? Я не уверен, что и v4hdr->ip_checksum можно оставлять нулевой.


Цитата(Alexey68 @  27.7.2015,  17:06 Найти цитируемый пост)
v4hdr->ip_destaddr = inet_addr(inet_ntoa(dest.sin_addr));
Зачем же так жестоко?


Код отсюда взят что-ли?




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 28.7.2015, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Спасибо feodorv!
Цитата(feodorv @  28.7.2015,  00:22 Найти цитируемый пост)
Вы, собственно, сформированный отправляемый пакет разбирали по винтику? Сравнивали, например, с тем, что порождает команда
Выделить всёБез подсветки
1:telnet 192.168.0.1 80
???

пока не проверял...

Цитата(feodorv @  28.7.2015,  00:22 Найти цитируемый пост)
Настолько сложно посчитать контрольную сумму?

это обязательное требование?


Цитата(feodorv @  28.7.2015,  00:22 Найти цитируемый пост)
Код отсюда взят что-ли?

да.
искал минимальный пример отправки пакета, но кроме этого не нашёл (наверное не так искал).

PM MAIL   Вверх
feodorv
Дата 28.7.2015, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2213
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  28.7.2015,  08:32 Найти цитируемый пост)
это обязательное требование?

Для TCP - да. Для UDP - нет.


Заметил, что у Вас, не смотря на всестороннее описание TCP заголовка, в IP-заголовке внезапно прописывается
Цитата(Alexey68 @  27.7.2015,  17:06 Найти цитируемый пост)
v4hdr->ip_protocol = IPPROTO_UDP;
 smile 


Цитата(Alexey68 @  28.7.2015,  08:32 Найти цитируемый пост)
искал минимальный пример отправки пакета, но кроме этого не нашёл

Ну, тогда держите для UDP:
Код
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>

#define MESSAGE "***+++---***0"

void printError( const char *header )
{
  LPVOID msgBuf = NULL;
  if( FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
        NULL, WSAGetLastError(), MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &msgBuf, 0, NULL) == 0 )
    printf( "Error in %s(), error code %u\n", header, WSAGetLastError());
  else
  {
    CharToOem( (char *) msgBuf, (char *) msgBuf);
    printf( "%s: %s\n", header, (char *) msgBuf);
  }
  LocalFree( msgBuf );
}

unsigned long allsum( unsigned long sum, unsigned short *buffer, int size)
{
  while( size >= sizeof(unsigned short) )
  {
    sum += *buffer++;
    size -= sizeof(unsigned short);
  }

  if( size ) sum += *(unsigned char *) buffer;
  return sum;
}

unsigned short checksum( unsigned long sum, unsigned short *buffer, int size)
{
  sum = allsum( sum, buffer, size);
  sum = (sum >> 16) + (sum & 0xffff);
  sum += sum >> 16;
  return (unsigned short) (~sum);
}

typedef struct ip_hdr
{
  unsigned char  ip_verlen;
  unsigned char  ip_tos;
  unsigned short ip_total_len;
  unsigned short ip_id;
  unsigned short ip_offset;
  unsigned char  ip_ttl;
  unsigned char  ip_protocol;
  unsigned short ip_checksum;
  unsigned int   ip_source;
  unsigned int   ip_dest;
} IP_HDR;

typedef struct udp_hdr
{
  unsigned short udp_src_port;
  unsigned short udp_dst_port;
  unsigned short udp_len;
  unsigned short udp_sum;
} UDP_HDR;

int main()
{
  WSADATA wsaData;
  SOCKET sock = INVALID_SOCKET;
  int opt = 1;

  if( WSAStartup( 0x0202, &wsaData) )
    printError( "WSAStartup" );
  else if( (sock = WSASocket( AF_INET, SOCK_RAW, IPPROTO_UDP, NULL, 0, 0)) == INVALID_SOCKET )
    printError( "WSASocket" );
  else if( setsockopt( sock, IPPROTO_IP, IP_HDRINCL, (char *) &opt, sizeof(opt)) == SOCKET_ERROR )
    printError( "setsockopt" );
  else
  {
    char buf[1024];
    IP_HDR *ipHdr   = (IP_HDR *) buf;
    UDP_HDR *udpHdr = (UDP_HDR *) &ipHdr[1];
    char *message   = (char *) &udpHdr[1];
    unsigned short mSize     = sizeof(MESSAGE)-1;
    unsigned short udpSize   = sizeof(*udpHdr) + mSize;
    unsigned short totalSize = sizeof(*ipHdr) + udpSize;
    struct sockaddr_in remote;
    unsigned long sum = 0;
    unsigned char tmp[2];

    ipHdr->ip_verlen    = (4 << 4) | 5;
    ipHdr->ip_tos       = 0;
    ipHdr->ip_total_len = htons( totalSize );
    ipHdr->ip_id        = 0;
    ipHdr->ip_offset    = 0;
    ipHdr->ip_ttl       = 128;
    ipHdr->ip_protocol  = IPPROTO_UDP;
    ipHdr->ip_checksum  = 0;
    ipHdr->ip_source    = inet_addr( "192.168.1.2" );
    ipHdr->ip_dest      = inet_addr( "192.168.1.1" );

    udpHdr->udp_src_port = htons( 30000 );
    udpHdr->udp_dst_port = htons( 30000 );
    udpHdr->udp_len      = htons( udpSize );
    udpHdr->udp_sum      = 0;

    memcpy( message, MESSAGE, mSize);

    sum = allsum( sum, (unsigned short *) &ipHdr->ip_source, sizeof(ipHdr->ip_source));
    sum = allsum( sum, (unsigned short *) &ipHdr->ip_dest, sizeof(ipHdr->ip_dest));
    tmp[0] = 0;
    tmp[1] = ipHdr->ip_protocol;
    sum = allsum( sum, (unsigned short *) tmp, sizeof(tmp));
    sum = allsum( sum, (unsigned short *) &udpHdr->udp_len, sizeof(udpHdr->udp_len));
    sum = allsum( sum, (unsigned short *) udpHdr, sizeof(*udpHdr));
    udpHdr->udp_sum = checksum( sum, (unsigned short *) message, mSize);

    remote.sin_family = AF_INET;
    remote.sin_port = udpHdr->udp_dst_port;
    remote.sin_addr.s_addr = ipHdr->ip_dest;

    if( sendto( sock, buf, totalSize, 0, (struct sockaddr *) &remote, sizeof(remote)) == SOCKET_ERROR )
      printError( "sendto" );
    else
      printf( "Successful sendto()\n" );
  }

  if( sock != INVALID_SOCKET && closesocket( sock ) == SOCKET_ERROR )
    printError( "closesocket" );
  if( WSACleanup() ) printError( "WSACleanup" );
  return 0;
}



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 28.7.2015, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Цитата(feodorv @  28.7.2015,  12:04 Найти цитируемый пост)
Заметил, что у Вас, не смотря на всестороннее описание TCP заголовка, в IP-заголовке внезапно прописывается
Цитата(Alexey68 @  27.7.2015,  17:06 Найти цитируемый пост)
v4hdr->ip_protocol = IPPROTO_UDP;

Отсутствие твёрдой "базы" даёт о себе знать...)
Цитата(feodorv @  28.7.2015,  12:04 Найти цитируемый пост)

Ну, тогда держите для UDP:

Очень признателен.
Извиняюсь, но при запуске:
sendto: требуемый адрес для своего контекста неверен.
Прописываю существующие адреса:
ipHdr->ip_source    = inet_addr( "192.168.0.55" );
ipHdr->ip_dest      = inet_addr( "192.168.0.1" );//роутер


Это сообщение отредактировал(а) Alexey68 - 28.7.2015, 15:20
PM MAIL   Вверх
feodorv
Дата 28.7.2015, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2213
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  28.7.2015,  14:56 Найти цитируемый пост)
sendto: требуемый адрес для своего контекста неверен

По-моему, что-то не то с конфигурацией сети. Нельзя ли увидеть результат выполнения команд
Код
ipconfig /all
и
Код
tracert 192.168.0.1
.

Это сообщение отредактировал(а) feodorv - 28.7.2015, 17:30


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 28.7.2015, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Цитата(feodorv @  28.7.2015,  17:16 Найти цитируемый пост)
Нельзя ли увидеть результат выполнения команд
ipconfig /all
и
tracert 192.168.0.1

Выслал в лс.


Это сообщение отредактировал(а) Alexey68 - 28.7.2015, 22:55
PM MAIL   Вверх
feodorv
Дата 28.7.2015, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2213
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Гм. На вид, всё хорошо. Есть ещё вариант, что номер udp_src_port не отвечает конфигурации системы. Если У Вас в предыдущем варианте
Цитата(Alexey68 @  27.7.2015,  17:06 Найти цитируемый пост)
tcphdr->source_port = htons(1180);
tcphdr->dest_port = htons(80);
пакет отправлялся, то я думаю, что стоит повторить эти номера портов в новом варианте. И, возможно, что это влияние файервола, если он включен.



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 28.7.2015, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Цитата(feodorv @  28.7.2015,  23:07 Найти цитируемый пост)
это влияние файервола, если он включен.

выключен.


Цитата(feodorv @  28.7.2015,  23:07 Найти цитируемый пост)
Есть ещё вариант, что номер udp_src_port не отвечает конфигурации системы. Если У Вас в предыдущем варианте

в таком варианте нормально работал:
udpHdr->udp_src_port = htons( 80 );
udpHdr->udp_dst_port = htons( 80 );
выставлял dest = 23, src = 80 тоже работало...
IDE Borland c++ 2007 если необходимо.
...
Пробовал на другом компе, результат тот же (xp sp3).
Какая у Вас ОС?

Это сообщение отредактировал(а) Alexey68 - 29.7.2015, 03:44
PM MAIL   Вверх
feodorv
Дата 29.7.2015, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2213
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  28.7.2015,  23:21 Найти цитируемый пост)
Какая у Вас ОС?
Как раз
Цитата(Alexey68 @  28.7.2015,  23:21 Найти цитируемый пост)
xp sp3



Цитата(Alexey68 @  28.7.2015,  23:21 Найти цитируемый пост)
IDE Borland c++ 2007

А Вы не могли бы скомпилиться в MSVSC++ и проверить?

Добавлено через 1 минуту и 34 секунды
Цитата(Alexey68 @  28.7.2015,  23:21 Найти цитируемый пост)
в таком варианте нормально работал:

Стоп. То есть всё получилось (пусть и с 80-тыми портами)?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 29.7.2015, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Цитата(feodorv @  29.7.2015,  10:52 Найти цитируемый пост)
Стоп. То есть всё получилось (пусть и с 80-тыми портами)? 

Получалось с "моим" кодом.

Цитата(feodorv @  29.7.2015,  10:52 Найти цитируемый пост)
А Вы не могли бы скомпилиться в MSVSC++ и проверить?

В VS2008 работает без проблем, только ругается:
CharToOemW: невозможно преобразовать параметр 1 из 'char *' в 'LPCWSTR'
В борланде компилируется нормально, но ошибка 10049. Проверил в отладчике всё нормально, но при выполнении sendto результат 10049...

Из Microsoft Network Monitor 3.4:
Udp: SrcPort = HTTP(80), DstPort = Telnet(23), Length = 21
В ответ:
Icmp: Destination Unreachable Message, Port Unreachable, 192.168.0.1:23
Так и должно быть (порт не доступен)?
p.s. хотел проверить доступность порта.


Это сообщение отредактировал(а) Alexey68 - 29.7.2015, 17:00
PM MAIL   Вверх
feodorv
Дата 29.7.2015, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2213
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  29.7.2015,  16:07 Найти цитируемый пост)
CharToOemW: невозможно преобразовать параметр 1 из 'char *' в 'LPCWSTR'

Отключите UNICODE. Всё равно printf в коде на него не рассчитан.


Цитата(Alexey68 @  29.7.2015,  16:07 Найти цитируемый пост)
В борланде компилируется нормально, но ошибка 10049. Проверил в отладчике всё нормально, но при выполнении sendto результат 10049...

Где-то в сети я читал про такое. Решения не давалось.


Цитата(Alexey68 @  29.7.2015,  16:07 Найти цитируемый пост)
Так и должно быть (порт не доступен)?

Этот порт (UDP 23) на роутере закрыт, вполне всё правильно. У меня тоже самое.

Добавлено через 6 минут и 54 секунды
У меня вопрос, Вам точно сырой сокет нужен?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 29.7.2015, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Цитата(feodorv @  29.7.2015,  17:05 Найти цитируемый пост)
Этот порт (UDP 23) на роутере закрыт, вполне всё правильно. У меня тоже самое.

На самом деле они открыты, на 23 через телнет заходит, через 80 тоже, попробовал 80, пишет недоступен.
Цитата(feodorv @  29.7.2015,  17:05 Найти цитируемый пост)
Вам точно сырой сокет нужен? 

Мне необходимо проверить порты без connect'a (без handshake)...
PM MAIL   Вверх
feodorv
Дата 29.7.2015, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2213
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  29.7.2015,  17:48 Найти цитируемый пост)
На самом деле они открыты, на 23 через телнет заходит, через 80 тоже, попробовал 80, пишет недоступен.

Не забывайте, что Вы на эти порты заходите по UDP, не TCP. Как раз UDP-порты закрыты.


Цитата(Alexey68 @  29.7.2015,  17:48 Найти цитируемый пост)
Мне необходимо проверить порты без connect'a (без handshake)... 

Что-то вроде nmap? У неё сурсы, кстати, открыты.

Это сообщение отредактировал(а) feodorv - 29.7.2015, 18:02


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 29.7.2015, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Если я правильно понимаю, то в Вашем примере необходимо заменить udp заголовок на tcp (для отправки полного tcp/ip пакета)?

Это сообщение отредактировал(а) Alexey68 - 30.7.2015, 21:53
PM MAIL   Вверх
feodorv
Дата 30.7.2015, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2213
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  29.7.2015,  18:13 Найти цитируемый пост)
Открыты, только разобраться в них равносильно написанию своего сканера).

Гм. Идёте в старые архивы, скачиваете версию 1.51, её и изучаете. Профит.


Цитата(Alexey68 @  29.7.2015,  18:13 Найти цитируемый пост)
Этот пример переделать под отправку TCP пакета сложно? 

Не знаю. Не думаю, что сложно. Но Вам же нужно в первую очередь изучить идеологию пассивного сканирования, с этим как?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
feodorv
Дата 30.7.2015, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2213
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  29.7.2015,  18:13 Найти цитируемый пост)
Этот пример переделать под отправку TCP пакета сложно? 
Только теперь я догадался, почему в Вашем коде стояло
Цитата(Alexey68 @  27.7.2015,  17:06 Найти цитируемый пост)
v4hdr->ip_protocol = IPPROTO_UDP;
А потому что:
Цитата
Limitations on Raw Sockets

On Windows 7, Windows Vista, Windows XP with Service Pack 2 (SP2), and Windows XP with Service Pack 3 (SP3), the ability to send traffic over raw sockets has been restricted in several ways:

   * TCP data cannot be sent over raw sockets.
(отсюда) То есть переделать, конечно, можно, но
Цитата
На всех компах c WinXP sp2, где я ещё в своё время пробовал, возвращалось "sendto() failed: 10004" при попытке спуффинга. На Win 2000 всё работает.
(отсюда). Не выйдет у Вас каменный цветок с TCP на сырых сокетах.



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Олег2005
Дата 30.7.2015, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Да, такова правда жизни
MSDN:
https://msdn.microsoft.com/en-us/library/wi...v=vs.85%29.aspx
Там внизу написано, как обойти эту проблему - с помощью LSP.
Но это дело требует высочайшей квалификации.
Потому сырой сокет применяется только в связке с ICMP.

Это сообщение отредактировал(а) Олег2005 - 30.7.2015, 17:49
PM MAIL WWW MSN   Вверх
Alexey68
Дата 31.7.2015, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Цитата

Не выйдет у Вас каменный цветок с TCP на сырых сокетах.

Ясно, благодарю Вас за помощь.
Ещё проблема в том что wifi адаптер не поддерживает неразборчивый режим...
Код для темы был взят отсюда: www.binarytides.com/raw-sockets-using-winsock/ 
(на первой странице я поспешил)

Это сообщение отредактировал(а) Alexey68 - 31.7.2015, 02:11
PM MAIL   Вверх
Google
  Дата 19.5.2019, 17:41 (ссылка)  





  Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1234 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.