2010-07-15 2 views
0

"Linux Network Programming"의 도착을 기다리고 있습니다. 그러나 그 동안 나는 형제 (자매)에게 약간의 정보를 요청할 것이라고 생각했습니다. 이더넷 헤더, ip 헤더 및 tcp/udp/icmp 헤더가 포함 된 원시 패킷 구조를 생성 한 경우 IP_HDRINCL 옵션을 사용할 때 실제로 입력해야하는 것은 무엇입니까? 처음에 나는 모든 것을해야한다고 생각 했었지만 이더넷 헤더의 src와 dest mac 주소가 커널에 의해 처리 될 수 있다는 것을 이해했습니다. 하지만 필자가 채워 넣어야 할 것은 무엇이며 커널이 다른 필드를 채워야한다는 것을 이해하기 위해 어떤 값을 가져야 하는가?IP_HDRINCL을 사용할 때 무엇을 기입해야합니까?

Thanx in advance boys (and girls)!

답변

0

IP 헤더로 시작합니다. 그러나 IP 및 TCP/UDP 프레임의 모든 구성원을 올바르게 설정하십시오.

가정은 정확합니다. 원시 IP 프레임을 보낼 때 이더넷 헤더를 포함하지 마십시오. 보통 이더넷은 낮은 수준의 통신으로 사용되지만 다른 것들도 있습니다.

+0

나는 계층 구조와 같은 구조를 가지고있다. (C ... hehe라는 단어 상속을 사용하고 싶지 않다.) 가장 낮은 레벨의 패킷은 이더넷 패킷이다. 그런 다음 IP 패킷에는 이더넷 패킷과 IP 구성 요소 등이 포함됩니다. 그래서 나는 이더넷 헤더를 직접 포함하고있다. 하지만 방금 src와 dst ip와 port를 채우면 src와 dst mac을 설정할 수 있었고 커널은 dst ip의 MAC 주소가 사용하는 dst의 mac을 업데이트한다는 것을 알았습니다. – inquam

+0

그러나 IP 헤더에 대한 포인터를 send() 함수에 전달합니다. 이 주소 앞에 다른 일부 바이트 (예 : 이더넷 헤더)가 있으면 상관하지 않습니다. – harper

+0

쓰기 기능을 사용하여 패킷을 네트워크에 씁니다. 내 머리글에 macaddress를 설정하면 wireshark로 볼 때 내 보낸 패킷에 반영됩니다. 이것은 나의 src mac 주소를 스푸핑 할 수있게 해준다. TCP 패킷이나 유사한 패킷으로 패킷을 보내면 커널에 의해 retrivet에 의해 덮어 쓰면 det macaddress. – inquam

관련 문제