RAW 7

中文man手册

目录

RAW

NAME
æ» è§
æ è¿°
å°åæ ¼å¼
SOCKETé项
注 æ
é误å¤ç
é 误
ç æ¬
BUGS
ä½ è
å¦ è§
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
è·

NAME

raw, SOCK_RAW - Linux IPv4 raw socket.

æ» è§

#include <sys/socket.h>
#include <netinet/in.h>
raw_socket = socket(PF_INET, SOCK_RAW, int protocol );

æ è¿°

Raw sockets 使å¾ç¨æ·ç«¯å¯ä»¥å®ç°æ°ç IPv4 åè®®ã raw socket è®¾å¤æ¥æ¶æåéä¸å«é¾æ¥å±æ¥å¤´çåå§æ°æ®åã åªææ¿æ´»æ¥å£é项 IP_HDRINCL æ¶ IPv4 屿ä¼å¨ä¼ è¾åä¸ æ·»å  IP æ¥å¤´ãèä¸å½æ¿æ´»æ¶ï¼åä¸å¿é¡»å«æ IP æ¥å¤´ãåä¸å« æ IP æ¥å¤´æè½è¢«æ¥æ¶ã

åªæ user id 为 0 æå·æ CAP_NET_RAW è½åæè½æå¼ raw sockets.

ææå¹éä¸ºæ¤ raw socket 声æçåè®®å·çåæé误é½å°è¢«ä¼ éå°è¯¥ socket.è¦å¯ç许å¯çåè®®åè¡¨ï¼ è¯·åè RFC1700 ç»åºç代å·å getprotobyname (3).

IPPROTO_RAW æå³ç IP_HDRINCL å¤äºæ¿æ´»ç¶æï¼ä¹æå³çæ¥æ¶ ææ IP åè®®. 使¯ä¸å许传éã

 

Image grohtml-3015134-1.png

妿æå®äº IP_HDRINCL ä¸ IP æ¥å¤´å«æçç®çå°å䏿¯ 0ï¼é£ä¹ 该 socket çç®çå°åç¨äºè·¯ç±è¯¥åã 妿æå®äº MSG_DONTROUTE åç®çå°å åºæåæä¸ªæ¬å°æ¥å£ãå¦åä¼è¿è¡è·¯æè¡¨æ¥æ¾ï¼ä½æ¯ç½å³è·¯ç±ä¼è¢« 忽ç¥ã妿æªè®¾å® IP_HDRINCL åå¯éè¿ setsockopt (2) å¨ raw socket ä¸è®¾å® IP header é项ãåè ip (7) äºè§£æ´å¤ä¿¡ æ¯ã

å¨ Linux 2.2 ä¸å¯ä»¥ç¨ IP socket é项设置ææç IP æ¥å¤´ååé项. è¿æå³çéå¸¸åªææ°çåè®® ææ²¡æç¨æ·çé¢çåè®®éè¦ raw socket (就象 ICMP). 彿¶å°ä¸ä¸ªåæ¶ï¼å®é¦å被传ç»ç»å®å°ååè®®çä»»ä½ raw socket ç¶åæä¼ ç»å¶ä»åè®®å¥æ(handler)ã (æ¯å¦ï¼åæ ¸å议模å).

å°åæ ¼å¼

raw socket 使ç¨å¨ ip (7) ä¸å®ä¹çæ å sockaddr_in å°åç»æã sin_port åç¨äºæå® IP åè®®å·ï¼ä½æ¯å¨ Linux 2.2 ä¸ä¼ éæ¶åºå° å¶å¿½ç¥ï¼èä¸åºè¯¥ä¸ç´è®¾ä¸º0 (åè§ BUGS).

å¯¹äºæ¥æ¶çåï¼sin_port 被设置为该åçåè®®å·ã åè å¶ä¸åæ¬ä»ç»ææç IP åè®®çæä»¶.

SOCKETé项

raw socket é项å¯ä½¿ç¨ setsockopt (2) è¿è¡è®¾ç½®ï¼ç¨ getsockopt (2)è¿è¡è¯»åï¼éè¿ä¼ é SOL_RAW ææ å¿ï¼.
ICMP_FILTER

æ¿æ´»ç»å®å° IPPROTO_ICMP åè®®çä¸ä¸ªç¨äº raw socket ç¹æ®çè¿æ»¤å¨ã 该å¼å¯¹æ¯ç§ ICMP æ¶æ¯é½æä¸ä¸ªä½ï¼æ©ç ï¼ï¼ å¯ä»¥æé£ç§ ICMP æ¶æ¯è¿æ»¤æï¼ç¼ºçæ¶æ¯ä¸è¿æ»¤ ICMP æ¶æ¯ï¼

å¦å¤ï¼è¿æ¯æææå¯¹æ°æ®æ¥ socket ææç ip(7) SOL_IP socket é项ï¼

注 æ

raw socket åé¿è¶è¿æ¥å£ MTU æ¶ä¼æååæç¢çã(å¦è§ BUGS). å¦ä¸ä¸ªæ´å好åå¿«éçéæ©æ¯ä½¿ç¨è·¯å¾ MTU æ¥æ¾ã å¨ ip (7) IP_PMTU_DISCOVER 䏿®µæè¯¦ç»æè¿°ã

ä½¿ç¨ bind (2) å¯å° raw socket ç»å®å°æå®çæ¬å°å°åã å¦ææ²¡æç»å®ï¼åæ¥æ¶ææç¬¦åæå®ç IP åè®®çåã å¦å¤ç¨ SO_BINDTODEVICE å¯ä»¥å° RAW socket ç»å®å°æå®çç½ç» 设å¤ã 详è§ï¼ socket (7).

IPPROTO_RAW åªè½ä¼ éãå¦æä½ ç¡®å®æ³æ¥æ¶ææç IP å ç¨ packet (7) socket å ETH_P_IP åè®®. 请注æ packet socketä¸è±¡ raw socket 飿 ·å¯¹ IP ç¢çè¿è¡éç»ã

妿æ³è¦ä¸ºä¸ä¸ª datagram socket æ¥æ¶çææ ICMP åï¼é£ä¹æå¥½ å¨é£ä¸ª socket ä¸ä½¿ç¨ IP_RECVERRã详è§ï¼ ip (7).

raw socket è½çªå¬ææç IP åè®®, å³ä½¿è±¡ ICMP æ TCP è¿æ ·å¨åæ ¸ä¸- æå议模åçä¹ä¸ä¾å¤ãè¿æ¶ååä¼åæ¶ä¼ éå° æ ¸å¿æ¨¡ååraw socket. ä¸ä¸ªå¯ç§»æ¤çç¨åºä¸è½ä¾èµè¿ä¸ªç¹æ§ï¼ 许å¤å¶ä» BSD socket å®ç°å¨è¿æ¹é¢æå±éï¼

Linux ä»ä¸æ¹åç¨æ·ä¼ è¾çå (é¤äºå 颿å°ç IP_HDRINCL ï¼å¡«å¥ä¸äº0å- 段).è¿ä¸å¶ä» raw socket å®ç°æ¹å¼æ¯ä¸åçï¼

RAW socket é常å¾é¾ç§»æ¤. socket ä¼ è¾æ¶ä½¿ç¨ sin_port ä¸è®¾ç½®ç åè®®ï¼ä½ Linux2.2 ä¸ä¸è¡äºï¼è§£å³åæ³æ¯ä½¿ç¨ IP_HDRINCL.

é误å¤ç

åªæè¿æ¥äº socket æ IP_RECVERR è®¾ç½®ä¸ºæææ¶ï¼ç½ç»é误æä¼ ä¼ éç»ç¨æ·ãå ä¸ºå¼å®¹æ§çåå åªæ EMSGSIZE å EPROTO 被传é ç» socket.

é 误

IP_RECVERR

ä½¿å¾ææçé误åå¨å° error queueï¼é误éåï¼.

EMSGSIZE

å太大ãæèå ä¸ºè·¯å¾ MTU æ¥æ¾ ï¼IP_PMTU_DISCOVERï¼ è®¾ç½®ä¸ºææï¼æèå ä¸ºåç尺寸è¶è¿ IPv4 è§å®çå æå¤§å°ºå¯¸ 64KB.

EACCES

ç¨æ·è¯å¾ä¼ éå°æå¹¿æå°å使¯å¹¶æªäºåå¨socketä¸è®¾ç½®å¹¿æ æ å¿ã

EPROTO

ICMP é误æ¥åæåæ°é®é¢ã

EFAULT

æ æååå°åã

EOPNOTSUPP

ä¼ éç» socket çæ å¿æ æ(æ¯å¦ï¼MSG_OOB ).

EINVAL

æ æåæ°.

EPERM

ç¨æ·æ ææå¼ raw socket. åªæç¨æ· id 为 0 æå·æ CAP_NET_RAW 屿§æ¹å¯ã

ç æ¬

IP_RECVERR å ICMP_FILTER æ¯ Linux 2.2 çæ°å®ç°. ä¸è½ç¨äºå¯ç§»æ¤ç¨åºã

å¦æè®¾ç½®äº SO_BSDCOMPAT æ å¿ï¼ Linux 2.0 é颿å BSD éå¼å®¹ç raw socket 代ç éè¯¯ï¼ å¨ 2.2 éå·²ç»ä¿®è¡¥äºï¼

BUGS

没ææè¿°éæä»£çæ©å±.

å½è®¾ç½® IP_HDRINCL é项ådatagramsï¼èªå¯»åæ°æ®åï¼ä¸ä¼è¢«å段 å¹¶å MTU éå¶. è¿æ¯ Linux 2.2 çéå¶.

å¨ Linux 2.2 sin_port ä¸è®¾ç½®ç IP åè®®ä¼ä¸¢å¤±ã使ç¨çæ¯ç»å®äº socket çåè®®ï¼æå¨ socket (2)åå§åè°ç¨ä¸æå®çåè®®ã

ä½ è

Andi Kleen.

å¦ è§

ip(7), socket(7), recvmsg(2), sendmsg(2).

RFC1191 for path MTU discovery.
RFC791 and the include file for the IP protocol.

[䏿çç»´æ¤äºº]

RedCandle <redcandle51@chinaren.com>

[ä¸æçææ°æ´æ°]

2000/10/15

ãä¸å½linux论åmanæå页翻è¯è®¡åã:

http://cmpp.linuxforum.net

è·

æ¬é¡µé¢ä¸æçç±ä¸æ man æå页计åæä¾ã
䏿 man æå页计åï¼https://github.com/man-pages-zh/manpages-zh