packet(7)

9972 단어 c
PACKET(7) 2008-08-08
NAME
       packet, AF_PACKET - 장치 계층 의 패키지 인터페이스.
SYNOPSIS
#include <sys/socket.h>
#include <netpacket/packet.h>
#include <net/ethernet.h> /* the L2 protocols */

packet_socket = socket(AF_PACKET, int socket_type, int protocol);

 
DESCRIPTION
 패키지 소켓 은 송 수신 장치 층 (OSI 2 층) 의 원본 패 킷 에 사 용 됩 니 다.이것 은 사용자 공간 에서 물리 층 상단 의 프로 토 콜 모듈 을 실현 할 수 있 도록 합 니 다.
socket 을 지정 하면type 은 SOCKRAW 는 원본 패 킷 에 링크 층 의 머리 가 포함 되 어 있 음 을 의미 하 며, SOCK 로 지정 되면DGRAM 은 링크 층 의 머리 를 벗 기기 위해 약간의 처 리 를 할 것 이다.링크 층 헤드 정보의 일반적인 형식 은 sockaddr 입 니 다.ll 구조.protocol 이 네트워크 바이트 순 서 를 입력 한 IEEE 802.3 프로 토 콜 번호 입 니 다.< linux / if 참조ether. h > 헤더 파일 은 허용 되 는 프로 토 콜 을 알 고 있 습 니 다.protocol 이 htons (ETH P ALL) 로 설정 되면 모든 프로 토 콜 을 받 아들 이 는 것 을 의미한다.모든 접속 프로 토 콜 형식 이 protocol 인 패 킷 은 커 널 에 전달 되 기 전에 PACKET 소켓 으로 전 달 됩 니 다.
유효한 UID 만 0 또는 CAPNET_RAW 특권의 프로 세 스 는 PACKET 소켓 을 열 수 있 습 니 다.
장치 구동 으로 송 수신 하 는 SOCKRAW 패키지 데 이 터 는 변경 되 지 않 습 니 다.가방 을 받 았 을 때 주 소 는 표준 sockaddr 에 전달 할 수 있 습 니 다.ll 주소 구 조 를 분석 합 니 다.패 키 지 를 보 내 면 사용자 가 향상 시 키 는 버퍼 는 물리 적 인 머리 를 포함 하고 대상 주소 가 정의 하 는 장치 대기 열 에 수정 하지 않 고 추가 해 야 합 니 다.일부 장치 구동 은 항상 다른 머리 를 추가 합 니 다.SOCK_RAW 유사 하지만 유행 이 지난 AF 호 환 되 지 않 습 니 다.INET/SOCK_PACKET 소켓.
송 수신 SOCKDGRAM 의 조작 은 약간 고 급 스 럽 습 니 다.물리 층 의 머리 는 가방 이 사용자 에 게 전달 되 기 전에 제거 되 었 다.SOCK 통과 하기DGRAM 의 패키지 소켓 으로 보 내 는 패 키 지 는 줄 을 서기 전에 물리 적 으로 적합 한 머리 를 무료 로 얻 을 수 있 습 니 다. 목적 주소 기반 sockaddrll 에서 제공 하 는 정보.
기본적으로 지정 한 프로 토 콜 의 모든 메 시 지 는 패키지 소켓 에 전 달 됩 니 다.지정 한 인터페이스의 가방 만 받 기 위해 서 는 주 소 를 포함 하 는 sockaddr 를 전달 해 야 합 니 다.ll 구 조 는 bind 에 패키지 소켓 을 인터페이스 에 연결 합 니 다.sll 만protocol 과 sllifindex 주소 필드 는 이러한 목적 에 사 용 됩 니 다.
connect 작업 은 패키지 소켓 에 지원 되 지 않 습 니 다.
MSG 를 전 달 했 을 때TRUNC 는 recvmsg, recv, recvfrom 에 표 시 됩 니 다. 라인 에 있 는 패 킷 의 실제 길 이 는 버퍼 보다 길 어도 되 돌아 갑 니 다.
주소 형식
sockaddr_ll 은 장치 에 독립 된 물리 적 층 주소 입 니 다.
struct sockaddr_ll {
unsigned short sll_family; /* Always AF_PACKET */
unsigned short sll_protocol; /* Physical layer protocol */
int sll_ifindex; /* Interface number */
unsigned short sll_hatype; /* Header type */
unsigned char sll_pkttype; /* Packet type */
unsigned char sll_halen; /* Length of address */
unsigned char sll_addr[8]; /* Physical layer address */
};

sll_protocol 은 네트워크 바이트 의 표준 이 더 넷 프로 토 콜 형식 으로 헤더 파일 < linux / ifether.h>。기본 소켓 을 가 져 오 는 프로 토 콜 입 니 다.sll_ifindex 는 인터페이스 색인 (netdevice (7 참조) 이 며, 0 은 모든 인터페이스 와 일치 합 니 다 (바 인 딩 에 만 사용 할 수 있 습 니 다).sll_hatype 은 ARP 형식 으로 < linux / ifarp.h>。sll_pktype 가방 종류 포함, 유효한 가방 종류: PACKETHOST 는 로 컬 호스트 의 패키지, PACKET 를 표시 합 니 다.BROADCAST 는 물리 층 라디오 패키지, PACKETOTHERHOST 는 장치 구동 이 혼합 모드 에서 잡 힌 다른 호스트 로 보 내 는 가방, PACKETOUTGOING 은 로 컬 호스트 에서 패키지 소켓 으로 되 돌아 가 는 것 입 니 다.이 유형 들 은 모두 수신 할 때 만 납 니 다.sll_addr 와 sllhalen 은 물리 층 (예 를 들 어 IEEE 802.3) 주소 와 길 이 를 포함 합 니 다.정확 한 해석 은 설비 에 의존한다.
가방 을 보 낼 때 sll 만 지정 하면 됩 니 다.family,sll_addr,sll_halen 과 sllifindex 면 충분 합 니 다. 다른 필드 는 모두 제거 해 야 합 니 다.sll_hatype 과 sllpktype 은 가방 을 받 을 때 만 사용 합 니 다. sllprotocol 과 sllifindex 는 bid 에 만 사 용 됩 니 다.
소켓 옵션
패키지 소켓 은 물리 적 다 중 방송 과 혼합 모드 를 설정 할 수 있 습 니 다.가방 소켓 에 SOLPACKET 호출 setsockopt, 옵션 PACKETADD_MEMBERSHIP 가입 가능, PACKETDROP_MEMBERSHIP 는 탈퇴 할 수 있 습 니 다.그들 은 모두 하나의 패 킷 을 원한 다.mreq 구 조 를 매개 변수 로 합 니 다:
struct packet_mreq {
int mr_ifindex; /* interface index */
unsigned short mr_type; /* action */
unsigned short mr_alen; /* address length */
unsigned char mr_address[8]; /* physical layer address */
};

mr_ifindex 는 대상 인터페이스 색인 을 포함 합 니 다.mr_type 매개 변 수 는 어떤 동작 을 수행 할 지 지정 합 니 다.PACKET_MR_PROMISC 는 공유 미디어 에서 모든 가방 을 받 는 것 을 사용 합 니 다 (흔히 '혼합 모드' 라 고 합 니 다).PACKET_MR_MULTICAST 바 인 딩 소켓 을 물리 적 다 중 방송 그룹 에 연결 합 니 다. 이 그룹의 주 소 는 mr 입 니 다.address 와 mralen 지정;PACKET_MR_ADDMULTI 는 인터페이스 에 도착 한 모든 멀티캐스트 패 키 지 를 받 을 수 있 도록 소켓 을 설정 합 니 다.
이 밖 에 전통 적 인 ioctls SIOCSIFFLAGS, SIOCADDMULTI, SIOCDELMULTI 는 같은 일 을 할 수 있다.
Ioctls
SIOCGSTAMP 는 마지막 에 도착 한 시간 표를 받 는 데 사용 할 수 있 습 니 다.매개 변 수 는 timeval 구조 입 니 다.
나머지 정 의 는 netdevice (7) 와 socket (7) 의 모든 표준 ioctl 작업 이 패키지 소켓 에 유효 합 니 다.
오류 처리
패키지 소켓 과 장치 구동 패 키 지 를 전달 할 때 오류 가 발생 하지 않 습 니 다. 여 기 는 잘못된 개념 이 없습니다.
ERRORS
       EADDRNOTAVAIL
              알 수 없 는 멀티캐스트 그룹 주 소 를 전 달 했 습 니 다.
       EFAULT 사용자 가 불법 메모리 주 소 를 전달 했다.
       EINVAL 에 잘못된 인자 입 니 다.
       EMSGSIZE
              가방 의 크기 가 MTU 를 초과 하 다.
       ENETDOWN
              인터페이스 가 활성화 되 지 않 았 습 니 다.
       ENOBUFS
              가방 에 할당 할 충분 한 메모리 가 없습니다.Not enough memory to allocate the packet.
       ENODEV 가 지정 한 인터페이스 주소 에는 알 수 없 는 장치 이름 이나 인터페이스 색인 이 포함 되 어 있 습 니 다.
       엔 론 트 는 가방 을 받 지 못 했다.
       ENOTCONN
              인터페이스 주소 가 전달 되 지 않 았 습 니 다.
       ENXIO  인터페이스 주 소 는 잘못된 인터페이스 색인 을 포함 합 니 다.
       EPERM  사용자 작업 권한 이 부족 합 니 다.
              이 밖 에 다른 오 류 는 저층 장치 에 의 해 생 성 될 수 있다.
VERSIONS
       AF_PACKET 은 Linux 2.2 의 새로운 특성 입 니 다.초기 버 전의 Linux 는 SOCK 만 지원 합 니 다.PACKET。
       현재 필요 한 헤더 파일: < netpacket / packet. h > (since glibc  2.1)。
       과거 시스템 필요:
#include
#include
#include
/*
The L2 protocols
*/
NOTES
이식 프로그램 은 pcap (3) 를 통 해 AF 를 사용 하 는 것 을 권장 합 니 다.PACKET。AF 만 차지 하 더 라 도PACKET 특성의 하위 집합 입 니 다.
SOCK_DGRAM 패키지 소켓 은 IEEE 802.2 LLC 헤더 나 IEEE 802.3 프레임 을 만 들 거나 해석 하지 않 습 니 다.ETHP_802_3. 프로 토 콜 을 보 낼 때 커 널 은 802.3 프레임 을 만 들 고 길이 필드 를 작성 합 니 다.사용 자 는 완전한 패 키 지 를 구성 하기 위해 LLC 헤드 를 제공 해 야 합 니 다.들 어 오 는 802.3 패 킷 은 DSAP / SAP 프로 토 콜 필드 를 재 활용 하지 않 고 LLC 헤드 접두사 가 있 는 ETH 로 사 용 됩 니 다.P_802_2. 사용자 에 게 제공 되 므 로 ETH 에 연결 할 수 없습니다.P_802_3, ETH 에 만 귀속 가능P_802_2. 스스로 재 활용 협의.기본적으로 프로 토 콜 을 채 우 는 표준 이 더 넷 DIX 패 키 지 를 보 냅 니 다.
패키지 소켓 은 방화벽 의 출입 규칙 에 제한 을 받 지 않 는 다.
호환성
Linux 2.0 에서 패키지 소켓 을 가 져 오 는 유일한 방법 은 socket (AF INET, SOCK PACKET, protocol) 을 호출 하 는 것 입 니 다.이것 은 여전히 지 지 를 받 고 있 지만 이미 시대 에 뒤떨어 졌 다.두 가지 방법의 주요 차이 점 은 SOCKPACKET 구식 sockaddr 사용 하기pkt 구 조 는 인 터 페 이 스 를 지정 하지만 이 구 조 는 물리 층 이 독립 된 것 이 아 닙 니 다.
struct sockaddr_pkt {
unsigned short spkt_family;
unsigned char spkt_device[14];
unsigned short spkt_protocol;
};

spkt_family 포함 장치 종류, spktprotocol 은 IEEE 802.3 프로 토 콜 형식 으로 < sys / if 에 정의 되 어 있 습 니 다.ether.h>,spkt_device 는 'eth 0' 과 같은 빈 문자열 입 니 다.
이 구 조 는 이미 폐기 되 었 으 니 더 이상 새로운 코드 에 사용 해 서 는 안 된다.
BUGS
glibc 2.1 SOL 없 음PACKET 정의, 제안 한 해결 방안 은 다음 과 같 습 니 다.
#ifndef SOL_PACKET
#define SOL_PACKET 263
#endif

이 값 은 다음 glibc 버 전에 서 고정 되 어 있 으 며, libc 5 시스템 과 충돌 하지 않 습 니 다.
IEEE 802.2 / 803.3 의 LLC 처 리 는 BUG 로 볼 수 있다.
소켓 필터 가 아직 문서 가 없습니다.
recvmsg 의 MSGTRUNC 확장 은 ugly hack 입 니 다. 제어 메시지 로 교체 해 야 합 니 다.현재 SOCK 을 통과 할 방법 이 없습니다.DGRAM 에서 패 킷 의 원래 목적 주 소 를 가 져 옵 니 다.
SEE ALSO
       socket(2), pcap(3), capabilities(7), ip(7), raw(7), socket(7)
 
       RFC 894 for the standard IP Ethernet encapsulation.
 
       RFC 1700 for the IEEE 802.3 IP encapsulation.
 
       The include file for physical layer protocols.
COLOPHON
       This  page  is  part of release 3.23 of the Linux man-pages project.  A
       description of the project, and information about reporting  bugs,  can
       be found at http://www.kernel.org/doc/man-pages/.
 
 
 

좋은 웹페이지 즐겨찾기