2013-07-22 105 views
-2

Wifi和Socket之间有什么关系?下面的Socket代码是否仍然适用于建立Wifi连接的地方?Wifi和Socket之间的关系

// 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

地铁和隧道之间的关系是什么? – 2013-07-22 07:08:47

回答

1

什么是WIFI和插座之间的关系?下面的Socket代码是否仍然适用于建立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 ; 

} 

注意:此代码不包含标头文件。一个简单的互联网研究会给你它。 我请你阅读所有你可以用ifreq结构所作出的命令:如果你想使一个tcpdump的像插槽和无线 Use iwreq

Use ifreq

对于iwreq我宁愿让你在这里发现访问(不使用pcap库),当打开原始套接字时,可以设置HTONS(ETH_P_ALL)选项,并将无线接口的索引绑定到此套接字(请参阅SIOCGIFINDEX ioctl和sockaddr_ll结构)。一个简单的recv()从这个套接字将给你所有的流量顶部的物理层。之后,您将需要了解如何解释数据接收。

希望它能帮助你。

安东尼

+0

我想OP只是想知道,如果相同的代码可以与以太网或WiFi工作...但是,问题不清楚:/ – nouney

+0

好的,如果是这样的话,问题是真的不清楚,作为源代码.. 。这取决于他想做什么,如果它只是通过无线发送数据是的,它是一样的(所以nouney说得对)。但是,如果他想在OSI模型中更深入,真的是不同的(radiotap包)谢谢队友! – deadeert

相关问题