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
};
答案 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()将为您提供物理层顶部的所有流量。之后,您将需要学习如何解释收到的数据。
希望它能帮到你。
安东尼