packet(7)
9972 단어 c
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
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/.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.