PF_PACKET을 이용해서 ethernet 패킷을 만들어서 보내고 싶습니

hsjin120의 이미지

요즘 무선구간에서 EAP-MD5 인증을 하는 경우가 있지요.
이걸 구현하는걸 해보고 싶은데..
일단 RAW socket을 이용해야 한다는걸 알게되었고..

1. socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

로 소켓을 생성 한다음..
보내고자 하는 버퍼를 생성 해야 할것 같더군요.

2. MakePacket(char*buf, ... ... )

이렇게 해서 buf에 패킷이 만들어 지면..

3. sendto (fd, buf, len ..... )
이렇게 해서 보내면 되는건가요?

buf는
| dstmac |srcmac | type | DATA | 로 구성이 되겠지요
6byte 6byte 2byte diff...
이렇게 구성하면 되는건가요?

hsjin120의 이미지

위 sendto에서 다섯번째와 여섯번째 파라미터를 잘 모르겠네요..
리눅스에서 네트웍 프로그래밍이 처음이라..
질문이 어이없더라도 조금만 이해해 주세요.

hsjin120의 이미지

libnet에..

sturct socketaddr sa;

memset(&sa, 0, sizeof(sa))
strncpy(sa.sa-data, device, sizeof(sa.sa_data));

sendto(1,2,3,0, &sa, sizeof(sa.sa_data);

이런형태로 사용하던데..
여기에 device에는 eth0 등 네트웍 디바이스의 이름이 들어가는게 맞나요?
그럼 sendto를 사용하면서 device대신 "eth0"등의 문자열을 사용해도
되는지요..