|
안녕하세요?
오랜만에 질문을 올려봅니다.
네트웍 프로그램밍을 하는중에 패킷을 만들다가
제대로 전송이 되지 않은거 같아서 질문을 드립니다.
윈도우 소켓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
{
예전에는 몰랐는데, 지금 보니 게시판이 무지 빠르네요
}
|