2012-05-11 4 views
8

C#을 사용하여 IP 패킷을 보내려고합니다.왜이 IP 패킷을 보낼 수 없습니까?

destAddress = IPAddress.Parse("192.168.0.198"), 
    destPort = 80; 

    // Create a raw socket to send this packet 
    rawSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 

    // Bind the socket to the interface specified 
    IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.0.140"),0); 
    rawSocket.Bind(iep); 

    // Set the HeaderIncluded option since we include the IP header 
    rawSocket.SetSocketOption(socketLevel, SocketOptionName.HeaderIncluded, 1); 

    // Send the packet! 
    int rc = rawSocket.SendTo(builtPacket, new IPEndPoint(destAddress, destPort)); 
    Console.WriteLine("sent {0} bytes to {1}", rc, destAddress.ToString()); 

builtPacket의 내용은 다음과 같습니다. 그것은 TCP SYN 패킷을 포함하는 IP 패킷입니다 (어쨌든 내가 만든 것입니다). 00 00 00 00 00 00 00 00

45 00 00 28 00 00 00 00 02 06 36 6E C0 A8 00 8C

C0 A8 00 C6 14 1E 00 50

05 02 FF FF E6 4F 00 00

출력은 다음과 같습니다

sent 40 bytes to 192.168.0.198 

문제는 내가 Wireshark를 추적에서 아무것도 표시되지 않습니다이다. 데이터가 Wireshark가 그것을 볼 수있는 스택을 충분히 밑도는 것 같지 않습니까? 브라우저를 사용하여 192.168.0.198에 연결하면 Wireshark가 모든 패킷을 표시하지만 위 코드 및 데이터를 사용하여 패킷을 보내려고하면 아무것도 표시되지 않습니다.

내 설정 :이 권한 문제 없습니다, 그래서

  • 내가 관리자로 실행하고 있습니다.

  • 는 Windows7은

  • 무선 연결은 내가 잘못 뭐하는 거지

(IP는 설정은 192.168.0.140로 자사의 IP를보고) (A VM에서 실행되지 않음)?

나는 Occam 's Razor가 여기에 적용되지만, 몇 시간 동안 이것을보고 있었고 무엇이 잘못되었는지를 알 수는 없다.

+1

wireshark에 필터가 설정되어 있습니까? – Default

+1

수신자가 패키지를 가져 옵니까? –

+0

나는 "192.168.0.198 호스트"필터를 사용했지만 필터를 사용하지 않았지만 내 응용 프로그램에서도 아무것도 얻지 못했습니다. – TonyM

답변

3

This question, backed up by MSDN, Windows는 더 이상 (XP SP 2에서 7까지) 원시 소켓을 사용하여 TCP 데이터를 전송할 수 없다고 주장합니다.

+0

페이로드가없는 TCP SYN 패킷 만 TCP 데이터를 보내지는 않습니다. – TonyM

+3

IMHO TCP가 TCP이면 내용이 중요하지 않습니다. – rekire

+0

@rekire 그건 내 생각 일거야. – shambulator

0

내 생각에 Wireshark가 올바른 네트워크 인터페이스를 찾지 못하거나 대상 IP 주소가 어떻게 든 로컬 컴퓨터로 연결된다면 OS 내부로 라우팅되어 '상어'에게 보이지 않게됩니다.

+1

Wiresharks는 192.168.0.140을보고 있다고 말합니다. 목적지 IP 주소를 브라우저 URL에 넣으면 Wireshark에 연결되어 나타납니다. – TonyM

관련 문제