MAC 주소 만 연결된 장치에 패킷을 보내고 내 로컬 LAN에 연결하는 것을 좋아합니다.알려진 MAC 주소로 패킷을 보내는 루비
그런 작업을 수행하는 데 사용할 수있는 루비/젬 라이브러리가 있습니까?
나는 tcpreplay와 같은 것을하고 싶지만 대신에 루비를 사용하고 싶다. 감사!
MAC 주소 만 연결된 장치에 패킷을 보내고 내 로컬 LAN에 연결하는 것을 좋아합니다.알려진 MAC 주소로 패킷을 보내는 루비
그런 작업을 수행하는 데 사용할 수있는 루비/젬 라이브러리가 있습니까?
나는 tcpreplay와 같은 것을하고 싶지만 대신에 루비를 사용하고 싶다. 감사!
MAC은 OSI 레이어 2에서 사용되는 주소이며이 레이어에서 사용하는 패키지 유형은 이더넷 프레임과 같습니다. IP 소켓은 레이어 3/4에 있습니다. 따라서 IP 소켓을 사용하는 경우 IP 패킷을 보내고 있습니다.
"MAC 주소로"보내려는 경우 다른 쪽에서 이해해야하는 원시 이더넷 프레임을 보내야합니다. 이 물건의 정말 낮은 수준을 감안할 때, 이것은 거의 당신이 정말로하고 싶은 일이 아닙니다.
대신 브로드 캐스트/응답 메커니즘 또는 멀티 캐스트 (예 : Bonjour에서 사용)를 사용하여 로컬 네트워크 (기술적으로 브로드 캐스트 도메인)에있는 원격 장치의 적절한 IP 주소를 가져와야합니다. 그렇게하면 훨씬 더 지원되는 IP 계층을 항상 사용할 수 있습니다. 이를 위해서는 장치에 IP 주소가 있어야합니다. DHCP와 같은 메커니즘을 사용하거나 IPv6의 자동 구성을 처리 할 수 있습니다.
귀하의 질문에 대해서는 Ruby가 원시 이더넷 프레임을 보내는 라이브러리를 알지 못합니다. 그러나 어쨌든 IP 외에도 새로운 프로토콜을 발명해야 할 필요가 있기 때문에 패키지를 보내는 것이 아마도 가장 우려 할 사항 일 것입니다.
고맙습니다. 나는 tcpreplay가 어떻게 보내는 지 궁금하다. 필요한 것은 pcap을 재생할 인터페이스입니다. 모든 도움에 다시 한 번 감사드립니다. 나는 tcpreplay 코드를 파헤쳐보고 –
을 찾아야 할 것이다. 나는 'tcpreplay'프로그램이 pcap을 eth 인터페이스에 덤프하는 방법이 궁금합니다. –
몇 가지 접근 방법이 있다고 가정합니다. 당신은 어떤 종류의 IP 패킷을 보내고 싶었는지 말하지 않았다. 그렇다면 어떤 IP 프로토콜을 말하지 않았다. (I 프로토콜을 캡슐화 무슨 ... 당신은 이더넷 프레임하지만를 보낼 알 수 있습니까?)
을 어쨌든, 당신은 루비와 SOCK_RAW를 열 수 있습니다, 같은 :
Socket.open(Socket::PF_INET, Socket::SOCK_RAW, Socket::IPPROTO_RAW)
또 다른 방법이 될 수 있습니다 다만 링크 로컬 IP를 선택하고 다음과 같이 귀하의 지역 ARP 캐시의 IP/MAC 매핑을 설정하려면 : 당신이 링크 로컬 IP 주소를 사용하여 더 익숙한 소켓 작전을 사용하여 통신 할 수있는 그런
system "arp -s host hw_addr"
.
이러한 모든 작업을 수행하려면 루트 권한이 필요합니다.
MAC 주소는 속해있는 IP에 대해 알지 못하면 실제로 연락 할 수 없습니다. 주어진 MAC이 항상 같은 IP를 가질 수는 없습니까? – Jasper