박세율 님이 쓰신 글 :
: 안녕하세요?
: 오랜만에 질문을 올려봅니다.
:
: 네트웍 프로그램밍을 하는중에 패킷을 만들다가
: 제대로 전송이 되지 않은거 같아서 질문을 드립니다.
:
: 윈도우 소켓api을 보니 socket2라는 버젼의 api도 있던데..
: 기존의 api와는 어떻게 다른지도 잘 모르겠더라구요
: 윈삭2에 대한 자료는 거의 찾기가 힘들고요..
:
: 우선 아래의 구조체를 사용해서 만들었는데 제대로 됀것인지
: 의문이 듭니다.
: 리눅스의 헤더파일에서 가져왔습니다 :)
:
: typedef unsigned char u_int8_t;
: typedef unsigned short u_int16_t;
: typedef unsigned long u_int32_t;
:
: struct iphdr
: {
: unsigned int ihl:4;
: unsigned int version:4;
: u_int8_t tos;
: u_int16_t tot_len;
: u_int16_t id;
: u_int16_t frag_off;
: u_int8_t ttl;
: u_int8_t protocol;
: u_int16_t check;
: u_int32_t saddr;
: u_int32_t daddr;
: /*The options start here. */
: };
:
: typedef u_int32_t tcp_seq;
:
: struct tcphdr
: {
: u_int16_t th_sport; /* source port */
: u_int16_t th_dport; /* destination port */
: tcp_seq th_seq; /* sequence number */
: tcp_seq th_ack; /* acknowledgement number */
:
: u_int8_t th_x2:4; /* (unused) */
: u_int8_t th_off:4; /* data offset */
:
: u_int8_t th_flags;
: #define TH_FIN 0x01
: #define TH_SYN 0x02
: #define TH_RST 0x04
: #define TH_PUSH 0x08
: #define TH_ACK 0x10
: #define TH_URG 0x20
: u_int16_t th_win; /* window */
: u_int16_t th_sum; /* checksum */
: u_int16_t th_urp; /* urgent pointer */
: };
:
:
: 소켓은 아래의 함수로 시작했습니다.
:
: if ((s = WSASocket(AF_INET, SOCK_RAW, 255, NULL, 0, 0)) == INVALID_SOCKET)
: {
: perror("wsasocket");
: exit(s);
: }
:
: ....
: .... 패킷 구조체 초기화 부분
: ....
:
: i = sendto(s, packet, IPHDRSIZE + TCPHDRSIZE + data_size, 0,
: (struct sockaddr *)&sin_dst, sizeof(struct sockaddr));
:
: 이렇게 해서 패킷을 전송합니다.
: 그런데.. 제대로 대는것 같지 않아서 질문을 드려봅니다.
: 만들어낸 패킷은 tcp/ip에서 syn패킷입니다
:
: netstat -an을 해보면 syn이라고 나와야 하는데.. 전혀 나오지 않습니다
:
:
:
: PS
: {
: 예전에는 몰랐는데, 지금 보니 게시판이 무지 빠르네요
: }
:
:
Winsock2 에 대한 자료를 찾을수 있는곳
http://home.jiran.com/~jijon 로 가보세요