Wifi和Socket之间的关系

时间:2013-07-22 07:04:13

标签: c sockets wifi

Wifi和Socket之间有什么关系?下面的套接字代码是否仍适用于进行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 个答案:

答案 0 :(得分:1)

  

Wifi和Socket之间的关系是什么?下面的套接字代码是否仍适用于进行Wifi连接的地方?

是。套接字API是一个抽象层,并不依赖于网络接口。 Wifi和套接字之间没有关系,代码中的

答案 1 :(得分:1)

你的问题不清楚。 如果我很清楚您想使用套接字来访问您的无线网卡。 在您的示例中,您不使用正确类型的套接字。我会举一个例子来澄清。

首先,您需要打开套接字类型SOCK_RAW并使用return作为文件描述符。然后你将使用这个FD in goal通过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结构可以执行的所有命令: Use ifreq

对于iwreq,我更喜欢让你在这里发现: Use iwreq

如果你想使用套接字和无线访问(不使用pcap库)制作tcpdump,你可以在打开套接字raw时设置HTONS(ETH_P_ALL)选项,并将无线接口的索引绑定到此套接字(参见SIOCGIFINDEX ioctl和sockaddr_ll结构)。来自此套接字的简单recv()将为您提供物理层顶部的所有流量。之后,您将需要学习如何解释收到的数据。

希望它能帮到你。

安东尼