PF_PACKET 장치 계층 프로 그래 밍 인터페이스
#include "/usr/include/sys/socket. h"
#include "/usr/includ/sys/if_packet. h"
packet_socket = socket(PF_PACKET, socket_type, protocol);
설명: packet socket 은 장치 구동 층 에서 원본 패 킷 을 수신 하거나 보 내 는 데 사용 되 며, 사용자 가 물리 층 이상 에서 자신의 통신 프로 토 콜 을 구축 하 는 데 사용 할 수 있 습 니 다. sockettype: SOCKRAW 또는 SOCKDGRAM.
그 중 SOCKRAW 는 원본 패 킷 을 보 내 는 데 사용 할 수 있 습 니 다. 이 때 데이터 링크 층 의 머리 를 사용자 정의 할 수 있 습 니 다.SOCK_DGRAM 은 데이터 링크 층 이상 에 패 키 지 를 구축 하 는 데 사용 할 수 있 습 니 다. 구조 sockaddrll 에 서 는 링크 계층 의 머리 정 보 를 사용 합 니 다. 프로 토 콜 은 IEEE 802. 3 프로 토 콜 번호 의 네트워크 시퀀스 입 니 다. 정 의 된 물리 적 계층 프로 토 콜 에 속 하 는 모든 패 키 지 는 패 킷 socket 을 통 해 커 널 에서 실 현 된 링크 계층 프로 토 콜 처리 층 에 도착 합 니 다. 특권 프로 세 스 나 CAP 만 있 습 니 다.NET_RAW 속성의 프로 세 스 만 패 킷 세트 인 터 페 이 스 를 열 수 있 습 니 다. SOCK 을 사용 하면RAW 는 패 킷 을 장치 드라이버 를 통 해 직접 보 냅 니 다. 이 는 사용자 프로그램 이 물리 적 인 머리 구 조 를 알 고 패 키 지 를 적당 하 게 구축 해 야 합 니 다. 이때 주소 분석 은 표준 sockaddr 에 사 용 됩 니 다.ll 구조. SOCKRAW 는 2. 0 판 핵심 오래된 SOCK 에 쓰 이 는 것 같 아 요.PACKET, 하지만 그들 은 완전히 일치 하지 않 습 니 다. SOCKDGRAM 은 더 높 은 층 에 세 워 집 니 다. 가방 을 받 을 때 물리 적 헤드 는 사용자 에 게 도착 하기 전에 삭 제 됩 니 다.가방 을 보 낼 때 물리 적 머리 는 보 내기 전에 자동 으로 추 가 됩 니 다. 기본적으로 모든 가방 은 packet socket 층 에서 받 습 니 다. 특정 인터페이스 에서 온 가방 만 받 을 때 bid 를 사용 하여 sockaddr 로 연결 합 니 다.ll 주소 구조 가 지정 한 인터페이스 입 니 다. SOCK 보 내기 위해RAW 패키지, 사용 자 는 물리 적 헤드 를 포함 한 완전한 패 키 지 를 공간 을 제공 하고 구축 해 야 합 니 다. 이 패 키 지 는 네트워크 카드 드라이버 전송 대기 열 에 변경 없 이 추가 되 며, 네트워크 카드 는 목적 주소 로 확 인 됩 니 다. SOCK 에 대해DGRAM 패키지 의 머리 는 가방 이 전송 대기 열 에 들 어가 기 전에 시스템 이 주소 구조 (sockaddr ll) 정보 에 따라 자동 으로 작 성 됩 니 다. 주소 구조: sockaddrll 은 장치 와 무관 한 물리 적 층 주소 구조 입 니 다.
struct sockaddr_ll
{
unsigned short sll_family; /* AF_PACKET */
unsigned short sll_protocol;/* */
int sll_ifindex; /* */
unsigned short sll_hatype; /* */
unsigned char sll_pkttype; /* */
unsigned char sll_halen; /* */
unsigned char sll_addr[8]; /* */
};
sll_protocol 은 sys / ifether. h 에서 정 의 된 표준 이 더 리 움 프로 토 콜 이 좋 은 네트워크 시퀀스 입 니 다.
sll_pktype 은 패키지 형식 입 니 다. 사용 가능 한 것 은: PACKET_HOST 형식 은 이 컴퓨터 주소 의 가방 에 사 용 됩 니 다. PACKET_BROADCAST 형식 은 물리 방송 에 사 용 됩 니 다. PACKET_MULTICAST 유형 은 물리 그룹 방송 에 사 용 됩 니 다. PACKET_OTHERHost 는 네트워크 카드 혼합 모드 에서 다른 호스트 통신 에서 패 키 지 를 받 는 데 사 용 됩 니 다. PACKET_OUTGOING 형식 은 이 컴퓨터 패 킷 socket 에서 보 내 는 가방 입 니 다. sllhalen 과 slladdr 는 물리 적 주소 와 길이 입 니 다. 멀티캐스트 와 혼합 모드 의 지원: Linux 2. 2 는 packet socket 에 설 치 된 새로운 방법 으로 멀티캐스트 와 혼합 모드 를 설정 하 는 것 을 지원 합 니 다. setsockopt 를 호출 하여 작업 을 합 니 다. SOLPACKET packet socket 위 에 PACKETADD_MEMBERSHIP 또는 PACKETDROP_MEMBERSHIP. 하부 구 조 는:
struct packet_mreq
{
intmr_ifindex; /* */
unsigned shortmr_type; /* mreq */
unsigned shortmr_alen; /* */
unsigned charmr_address[8]; /* */
};
mr_interfac 는 인터페이스 색인 을 포함 하여 누가 변 할 것 인 지 를 지적 합 니 다.
mr_type: PACKET_MR_MULTICAST 는 바 인 딩 세트 인터페이스 와 mr 에 사 용 됩 니 다.address 가 지정 한 물리 그룹 방송 주소; PACKET_MR_PROMISC 는 모든 네트워크 패 키 지 를 받 아들 이기 위해 혼합 모드 를 활성화 하 는 데 사 용 됩 니 다. PACKET_DROP_MEMBERSHIP 는 묶 거나 리 셋 을 취소 하 는 데 사 용 됩 니 다. 입 출력 제어: 입 출력 제 어 는 ioct 를 호출 할 수 있 습 니 다.
ioctl(tcp_socket, ioctl_type, value_ptr);
SIOCGSTAMP 는 표준 timeval 구 조 를 되 돌려 주 며 정확 한 시간 기록 이 필요 할 때 유용 합 니 다.
FIOCSETOWN 과 SIOCSPGRP 는 프로 세 스 비동기 통신 이 끝 날 때 SIGIO 신 호 를 보 내 는 데 사 용 됩 니 다. 그 매개 변 수 는 pid 입 니 다.t 형식 입 니 다. FIOCGETOWN 과 SIOCGPGRP 는 현재 SIGIO 신 호 를 받 은 프로 세 스 그룹 을 얻 는 데 사 용 됩 니 다. 설정 되 지 않 았 을 때 0 을 되 돌려 줍 니 다. 매개 변수 유형 은 pid 입 니 다.t.
오류 처리: 오류 처리 메커니즘 이 없습니다. 호환성: Linux 2. 0 은 SOCK 만 지원 합 니 다.RAW, 오래된 구 조 를 사용 합 니 다:
struct sockaddr_pkt
{
unsigned short spkt_family;
unsigned char spkt_device[14];
unsigned short spkt_protocol;
};
spkt_family 는 장치 형식 을 포함 합 니 다.
spkt_protocol 은 IEEE 802. 3 표준 프로 토 콜 입 니 다. spktdevice 는 "eth 0" 과 같은 장치 이름 입 니 다.오류 유형: ENETDOWN 인터페이스 가 작 동 하지 않 습 니 다. ENOTCONN 은 인터페이스 주소 가 없습니다. ENODEV 알 수 없 는 장치 나 인터페이스 이름 입 니 다. EMSGSIZE 패키지 가 너무 큽 니 다. ENOBUFS 는 받 은 패 키 지 를 저장 할 메모리 가 충분 하지 않 습 니 다. EFAULT 의 잘못된 메모리 주소 입 니 다. EINVAL 매개 변수 가 잘못 되 었 습 니 다. ENXIO 인터페이스 주 소 는 비합법적 인 인터페이스 색인 을 포함 하고 있 습 니 다. EPERM 은 packet socket 인터페이스 권한 이 없습니다. EADDRNOTAVAIL 은 알 수 없습니다.멀티캐스트 주소. oup address passed. ENOENT 에서 가방 을 받 지 못 했 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.