2011-04-13 15 views
6

프레임의 이더넷 부분을 수정하고 싶지는 않지만 IP 패킷과 프레임의 데이터 부분을 수정해야합니다.C#으로 원시 IP 패킷 보내기, 이더넷 계층 위의 모든 것

원시 프레임을 보내려고 시도하지만 여전히 IP 정보를 넣습니다. 기본적으로 보내는 비트를 제외하고는 끝점을 정의하지 않고 프레임을 보내야합니다. 나는 싶지 않아, 사용의 SendTo 프레임의 IP 부분을 추가 나는 소스 IP 스푸핑 원하는 것을 :

여기에 내가 가진 무엇 :

Socket s = new Socket(AddressFamily.Unspecified, SocketType.Raw, ProtocolType.Raw); 
EndPoint ep = new IPEndPoint(IPAddress.Parse("205.188.100.58"),80); 
s.SendTo(GetBytes(""),ep); //im sending nothing, so i expect the frame to just have ethernet stuff 
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, false); 

내 질문. "보내기"를 사용하면 끝점을 지정해야하기 때문에 충돌이 발생합니다. 무엇에 대한 제안? 패킷을 보내고 IP 섹션과 데이터 섹션을 직접 정의하려고합니다.

참고 : 아니오 나는 DOS 공격을하지 않고있어, 합법적 인 용도로이 기능이 필요합니다!

IP 부분을 정의하는 방법을 알고 있습니다. 실제로 IP 부분을 생성하지 않고 실제로 데이터를 보내는 문제입니다.

+0

가능한 복제본 [C#으로 원시 이더넷 패킷을 보내는 방법] (http://stackoverflow.com/questions/3964013/how-send-raw-ethernet-packet-with-c) – mafu

+0

이 질문은 매우 바람직합니다. 텍스트,하지만 거기에 답변은 -이 병합해야합니다. – mafu

답변

8

귀하의 질문은 아주 잘 여기에 대한 답변 : How send raw ethernet packet with C#?

(이것은 매우 강력한 기저의은 WinPcap 구현을 사용으로), 당신은 쉽게 당신이 원하는 방법으로 개별 데이터 패킷을 수정할 수있는 라이브러리의 Pcap.Net 종류를 사용.

IP 레이어를 완전히 건너 뛰고 MAC 주소로 보내기 : http://www.codeproject.com/KB/IP/sendrawpacket.aspx 거의 비슷한 실시간 통신을 제공하는 이더넷을 통해 마이크로 컨트롤러 (Atmel ATmega)와 통신하기 위해 비슷한 접근 방식을 사용했습니다.

+0

이전에, System.Net.Socket에서 바로 할 수 있기를 기대했습니다. Blah oh well – brandon

+0

System.Net.Socket은 Winsock을 감싸는 래퍼이므로 Ping/Invoke와 Winsock을 직접 사용할 수 있지만 Pcap.Net을 사용하면 훨씬 더 좋습니다. –

+0

나중에 알게되었습니다. 좋은 발견. 해명 해줘서 고마워. – brandon

1

"라이브러리의 Pcap.Net 종류를 사용하면 원하는 방식으로 개별 데이터 패킷을 쉽게 수정할 수 있습니다 (매우 강력한 UnderPlay WinPcap 구현을 사용함)."

틀린! WinPcap cant는 필터링/패킷 삭제/패킷 생성을 수행하지 않습니다. 즉, 비동기식으로 패킷을 모니터 할 수 있습니다 ...

Raw 패킷/무차별 모드/드라이버 필터/패킷 라우팅이 또 다른 이야기입니다.

관련 문제