2013-07-22 2 views
-2

와이파 이와 소켓의 관계는 무엇입니까? 아래 소켓 코드가 Wifi 연결이 이루어지는 위치에 계속 적용됩니까?와이파 이와 소켓의 관계

// IPv4 AF_INET sockets: 
struct sockaddr_in { 
    short   sin_family; // e.g. AF_INET, AF_INET6 
    unsigned short sin_port;  // e.g. htons(3490) 
    struct in_addr sin_addr;  // see struct in_addr, below 
    char    sin_zero[8]; // zero this if you want to 
}; 

struct in_addr { 
    unsigned long s_addr;   // load with inet_pton() 
}; 


    #include<stdio.h> 
#include<sys/socket.h> 
#include<arpa/inet.h> //inet_addr 

int main(int argc , char *argv[]) 
{ 
    int socket_desc; 
    struct sockaddr_in server; 

    //Create socket 
    socket_desc = socket(AF_INET , SOCK_STREAM , 0); 
    if (socket_desc == -1) 
    { 
     printf("Could not create socket"); 
    } 

    server.sin_addr.s_addr = inet_addr("74.125.235.20"); 
    server.sin_family = AF_INET; 
    server.sin_port = htons(80); 

    //Connect to remote server 
    if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0) 
    { 
     puts("connect error"); 
     return 1; 
    } 

    puts("Connected"); 
    return 
    struct sockaddr { 
     unsigned short sa_family; // address family, AF_xxx 
     char    sa_data[14]; // 14 bytes of protocol address 
    }; 
+2

지하철과 터널의 관계는 무엇입니까? –

답변

1

와이파이 및 소켓 사이의 관계는 무엇입니까? 아래 소켓 코드가 Wifi 연결이 이루어지는 위치에 계속 적용됩니까?

예. 소켓 API는 추상화 계층이며 네트워크 인터페이스에 종속되지 않습니다. Wifi와 소켓 사이에 관계가 없습니다 코드에입니다.

1

귀하의 질문에 명확하지 않습니다. 잘 이해하면 소켓을 사용하여 무선 카드에 액세스하려고합니다. 예제에서는 적절한 유형의 소켓을 사용하지 않습니다. 나는 당신에게 명백하게 할 모범을 줄 것이다.

먼저 소켓 유형 SOCK_RAW를 열고 반환 값을 파일 설명자로 사용해야합니다. 그런 다음이 FD를 사용하여 ioctl() 함수를 통해 일부 명령을 전달합니다.

int main() { 

struct ifreq ifr ; // for interface manipulation 
struct iwreq iwr ; // for wifi order (scan, connection...) 

int sock = socket(AF_PACKET,SOCK_RAW,0) // use htons(ETH_P_ALL) option to capture traffic 
if (sock == -1) { 
    perror("socket error") ; 

/* Let's get the hardware address of your wifi interface */ 
/* In my example the name of your wifi interface is wlan0 */ 

memset(&ifreq,0,sizeof(struct ifreq)) 
char hwaddr[6] ; 
char ifname[5] ; 
strncpy(ifname,"wlan0",5) ; 
memcpy(ifr.ifr_name,ifname,sizeof(ifr.ifr_name)) ; 
ret = ioctl(sock,SIOCGIFHWADDR,&ifr) ; 
if (ret < 0) 
    perror("error ioctl") ; 
memcpy(hwaddr,ifr.ifr_name,6) ; 
printf("HWaddr : %s\n",hwaddr) ; 

return 0 ; 

} 

참고 :이 코드에는 헤더 파일이 포함되어 있지 않습니다. 인터넷에 대한 간단한 연구는 당신에게 그것을 줄 것이다. 당신은 소켓과 무선과 같은 tcpdump를를 확인하려면 Use iwreq

: 내가 할 선호 iwreq를 들어 Use ifreq

당신이 여기에서 발견 : 나는 당신이 ifreq 구조로 만든 수있는 모든 명령을 읽어 초대 소켓 원시를 열 때 HTONS (ETH_P_ALL) 옵션을 설정하고 무선 인터페이스의 색인을이 소켓에 바인딩 할 수 있습니다 (SIOCGIFINDEX ioctl 및 sockaddr_ll 구조체 참조). 이 소켓의 간단한 recv()는 모든 트래픽을 물리적 레이어로 전달합니다. 그 후에 데이터를 해석하는 방법을 알아야합니다.

희망이 있으면 도움이 될 것입니다.

안토니

+0

나는 OP가 단지 같은 코드가 이더넷이나 wifi로 작동 할 수 있는지 알고 싶다고 생각한다. 그러나 질문은 분명하지 않다./ – nouney

+0

그래, 그럴 경우, 소스 코드로서 질문이 정말 불분명하다. 그것은 단순히 그가 wifi로 데이터를 보내면 그가하고 싶은 일에 달려 있습니다. 네 그것은 동일합니다 (따라서 명사가 올바르게 알립니다). 그러나 그가 OSI 모델에서 더 깊숙히 들어가기를 원한다면, 정말 다른 것입니다 (radiotap 패키지). 고마워요! – deadeert