Enviar pacote/datagrama para um MAC, sem ter conexão

1. Enviar pacote/datagrama para um MAC, sem ter conexão

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 19/12/2015 - 02:28h

Boa noite,

Problema: Enviar um pacote/datagrama (não sei o nome correto nesse caso, acho que vai mais para datagrama ? (Edit: Tava pensando acho que o nome correto é frame...) ), na seguinte situação, tenho meu notebook, por exemplo, e quero mandar um byte para outro computador/pic/atmel/arduino/etc, sem ter uma conexão entre esses disposivos, nenhum deles está conectado a uma rede wireless, logo sem TCP/IP..., mas eu tenho o MAC desse disposivo o qual quero mandar apenas 1 byte, e quero trata - lo é claro.

Dúvida: Como fazer isso em C/C++ ou java?

Respostas: Procurei no Google/Duckduck a respeito e não encontrei solução, talvez meus termos de pesquisa não são cabiveis (bem provavelmente), já que desconheço o nome desse tipo de "conexão", então ficaria feliz se alguém que conhece do assunto indicasse algum site que ensine como fazer algo do tipo, nome de uma função/metodo que pode ser usado ou o nome do bixo, qualquer coisa.

Att,


  


2. Re: Enviar pacote/datagrama para um MAC, sem ter conexão

Giovanni  M
Giovanni_Menezes

(usa Devuan)

Enviado em 19/12/2015 - 02:47h

Pelo protocolo TCP, imagino que é impossível, tem que existir o envio de abertura de conexão, SYN.
No caso seria UDP, que não envia pedido de abertura de conexão, em todos os casos, só alguém com conhecimento avançado de rede pra te responder se existe um jeito, eu ainda não cheguei la rs.

Seja como for, precisa existir alguma conexão sobe algum protocolo.


3. Re: Enviar pacote/datagrama para um MAC, sem ter conexão

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 19/12/2015 - 03:03h

Giovanni_Menezes escreveu:

Pelo protocolo TCP, imagino que é impossível, tem que existir o envio de abertura de conexão, SYN.
No caso seria UDP, que não envia pedido de abertura de conexão, em todos os casos, só alguém com conhecimento avançado de rede pra te responder se existe um jeito, eu ainda não cheguei la rs.

Seja como for, precisa existir alguma conexão sobe algum protocolo.


Muito obridado pela resposta,

Eu quero usar a comunicação que cria um protocolo, eu acho que deveria ter usado o termo mensagem ou frame ?.

Obs: O outro dispositivo não precisa responder só receber.


4. Re: Enviar pacote/datagrama para um MAC, sem ter conexão

Giovanni  M
Giovanni_Menezes

(usa Devuan)

Enviado em 19/12/2015 - 03:11h

Arthur_Hoch escreveu:

Muito obridado pela resposta,

Eu quero usar a comunicação que cria um protocolo, eu acho que deveria ter usado o termo mensagem ou frame ?.

Obs: O outro dispositivo não precisa responder só receber.


O que determina o que é pacote, datagrama e etc depende de qual camada do modelo OSI em que este elemento é tratado.

O protocolo sempre vem antes da comunicação e não o contrario, até mesmo para receber dados UDP vc precisa já ter estabelecido uma conexão com um nó, mesmo que o UDP não envie pacote SYN

Meu conhecimento de rede é basico, mas não vejo meios possiveis de você conseguir o que planeja. o jeito é esperar alguém com mais gabarito no assunto para te ajudar.




5. Re: Enviar pacote/datagrama para um MAC, sem ter conexão

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/12/2015 - 14:59h

Você vai precisar criar um socket do tipo SOCK_RAW. Essa operação requer execução como root ou com o privilégio CAP_NET_RAW.

Na hora de enviar datagramas com sendto() (ou de criar um circuito virtual com connect()), você pode escolher uma família de endereços como AF_INET ou AF_INET6. Nesse caso -- e até onde me lembro --, o kernel vai verificar se o datagrama que você tenta mandar é válido ou não, e pode se recusar a enviar uma mensagem mal formatada no nível de IP ou IPv6, mesmo sendo um raw socket. Por outro lado, se você usar como família de endereços AF_PACKET, então você vai realmente poder enviar qualquer coisa que possa trafegar via Ethernet.

EDIT: O que eu disse acima foi meio de memória, e meio consultando rapidamente a manpage de socket(2). Lendo mais a fundo, as versões mais novas do kernel suportam outras operações e combinações de tipo de socket (na chamada que cria o socket) e família de endereços (na recepção e envio de pacotes/datagramas), dando mais flexibilidade para você. Recomendo a leitura das manpages socket(2), socket(7) e packet(7).


6. Re: Enviar pacote/datagrama para um MAC, sem ter conexão

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 20/12/2015 - 07:10h

paulo1205 escreveu:

Você vai precisar criar um socket do tipo SOCK_RAW. Essa operação requer execução como root ou com o privilégio CAP_NET_RAW.

Na hora de enviar datagramas com sendto() (ou de criar um circuito virtual com connect()), você pode escolher uma família de endereços como AF_INET ou AF_INET6. Nesse caso -- e até onde me lembro --, o kernel vai verificar se o datagrama que você tenta mandar é válido ou não, e pode se recusar a enviar uma mensagem mal formatada no nível de IP ou IPv6, mesmo sendo um raw socket. Por outro lado, se você usar como família de endereços AF_PACKET, então você vai realmente poder enviar qualquer coisa que possa trafegar via Ethernet.

EDIT: O que eu disse acima foi meio de memória, e meio consultando rapidamente a manpage de socket(2). Lendo mais a fundo, as versões mais novas do kernel suportam outras operações e combinações de tipo de socket (na chamada que cria o socket) e família de endereços (na recepção e envio de pacotes/datagramas), dando mais flexibilidade para você. Recomendo a leitura das manpages socket(2), socket(7) e packet(7).


Muito obrigado!







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts