socket编程之设备绑定

socket编程中,对于其步骤可能大家都耳熟能详了,但是我们在特定的环境下如何写出特定的SOCKET呢?下边就介绍一种绑定设备的socket。

一般介绍socket的书籍中介绍socket的绑定都是绑定其ip地址。其对应的结构体是sockaddr_in。那么大家是否了解其它的结构体呢?

      sockaddr,sockaddr_ll。可能大家都知道前者,因为在绑定的时候调用bind函数都要转换成sockaddr*的。所以就不介绍了,相信大家都了解了,如果不了解,google一下,非常详细。

      那么对于sockaddr_ll,下边就介绍他

struct sockaddr_ll { unsigned short sll_family; __be16 sll_protocol; int sll_ifindex; unsigned short sll_hatype; unsigned char sll_pkttype; unsigned char sll_halen; unsigned char sll_addr[8]; };  

 

绑定设备的时候只要把你要帮顶的设备的索引号赋给 sll_ifindex即可。

 

下边给一段使用它的代码:

..... int skt = socket(PF_PACKET,SOCK_RAW, htons(ETH_P_ALL)); int caplen = 65535; int ret = setsockopt(skt,SOL_SOCKET,SO_RCVBUF, &caplen, sizeof(caplen)); struct ifreq ifstruct; strcpy(ifstruct.ifr_name, argv[1]); ioctl(skt, SIOCGIFINDEX, &ifstruct); sockaddr_ll sll; memset( &sll, 0, sizeof(sll) ); sll.sll_family = AF_PACKET; sll.sll_ifindex = ifstruct.ifr_ifindex; sll.sll_protocol = htons(ETH_P_ALL); int rc = bind(skt, (struct sockaddr *)&sll, sizeof(sll)); ...

 

你可能感兴趣的:(编程,socket,struct,Google)