ntohs() 와 htons() 함수의 차이
void packet_handler(u_char* param,
const struct pcap_pkthdr* header,
const u_char* pkt_data) // pcap_loop()가 돌면서 패킷을 감지할때 그 때 읽어들인 감청 데이터는 pkt_data 에 들어간다.
{
EtherHeader* pEther = (EtherHeader*)pkt_data; // 감청 데이터를 EtherHeader 로 형변환
printf( "SRC: %02X-%02X-%02X-%02X-%02X-%02X -> "
"DST: %02X-%02X-%02X-%02X-%02X-%02X, type:%04X\n",
pEther->srcMac[0], pEther->srcMac[1], pEther->srcMac[2],
pEther->srcMac[3], pEther->srcMac[4], pEther->srcMac[5],
pEther->dstMac[0], pEther->dstMac[1], pEther->dstMac[2],
pEther->dstMac[3], pEther->dstMac[4], pEther->dstMac[5],
//ntohs(pEther->type)
pEther->type
);
}
ntohs(pEther->type) 과 htons(pEther->type)이 기능은 똑같다고 하는데, ntohs() 는 네트워크 오더 -> 호스트 오더 이고, htons() 는 호스트 오더->네트워크 오더 아닌가요?
제가 Intel 프로세스 탑재한 PC에서 예제 실행중인데, 위 코드와 같이 실행하면 Ipv4 인 type 값이 0008로 나옵니다. 그래서 htons() 로 감싸서 출력하면 0800 으로 잘되는데 ntohs() 로 감쌌을떄는 왜 0800 이 나오는지 모르겠습니다.
ntohs() 면 호스트 오더를 사용하는데 제 pc에서는 그대로 호스트 오더 방식으로 되야 하는거 아닌가요?
回答 1
0
ntohs()나 htons()나 이름만 다를 뿐 기능이 같습니다. 그건 어디까지나 개발자 본인이 알고 제대로 값을 넣어야 합니다. 그리고 PC가 인텔이라 하더라도 패킷 데이터 값은 네트워크 오더에 맞춰 보내줍니다. 참고하시기 바랍니다. 😄
강의 외 질문
0
66
2
맥에서 Window 가상화 프로그램 사용 문의
0
80
3
프로젝트 제안 수행에 대한 조언을 구하고 싶습니다.
0
92
2
컴퓨터가 여러 대 있는 환경에서의 질문입니다.
1
45
1
[자문자답] Windows 11 Evaluation VM Download
2
95
1
VMNet에 대한 질문 드립니다.
0
68
1
dispatcher_handler가 호출되는 시점
0
80
3
패킷 분석 너무 재밌습니다!!
0
80
2
안녕하세요 선생님 질문이 있습니다~
1
56
2
안녕하세용 선생님 질문이 있습니다~~
1
79
1
안녕하세요 선생님~~ 질문이 있습니다~~
1
98
1
프로토콜 헤더 암기
0
110
1
[Ethernet 채팅 프로그램 개발] 이런것도 가능할까요?
0
191
2
VMware Ethernet1이 없는 경우
1
247
2
socker buffer 에 관하여 문의 드립니다.
0
128
1
Windows 11 가상머신 다운로드 이슈 3
0
225
2
Windows 11 가상머신 다운로드 이슈 2
0
259
3
Windows 11 가상머신 다운로드 이슈
0
278
1
Basic_dump 수행 오류
0
170
2
이더넷 질문 드립니다.
0
155
1
윈도우10으로 해도 되나요??
0
206
1
유해 사이트 차단 프로젝트 관련 마지막 질문입니다..
0
226
2
유해사이트 차단 프로젝트 관련 질문입니다.
0
269
1
VMware Player
0
464
1

