
рд░реЙ рд╕реЙрдХреЗрдЯреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдмрд╛рдХреА рд╕реЙрдХреЗрдЯ рдПрдкреАрдЖрдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╣рд░ рдХреЛрдИ рдЗрди "рд╡реНрдпрд╛рдкрдХ" рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдирдХрд╛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╡рд░реНрдгрди рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЖрдо рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯреНрд╕ рдФрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдирд┐рдкрдЯреЗрдВред
рдЗрд╕рд▓рд┐рдП, рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реЙрдХреЗрдЯ рд╣реИрдВ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
int socket = socket(AF_INET, SOCK_RAW, IPPROTO_*);
рдореИрдВ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рд╕реЙрдХреЗрдЯ рдХреЙрд▓ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реНрдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╡реИрдЪрд╛рд░рд┐рдХ рдЕрд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд░ рджреВрдВрдЧрд╛ред рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕реЙрдХреЗрдЯ рдПрдкреАрдЖрдИ рдХреА рдХрд▓реНрдкрдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЧрдИ рдереА, рдЕрд░реНрдерд╛рддред рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рддрдВрддреНрд░ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдЗрдВрдЯреНрд░рд╛-рд╣реЛрд╕реНрдЯ рдЗрдВрдЯрд░реИрдХреНрд╢рди рднреАред рдХреЙрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рддрдерд╛рдХрдерд┐рдд рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рд╕рдВрдЪрд╛рд░ рдбреЛрдореЗрдиред рд╕реЙрдХреЗрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рд╕рдВрдЪрд╛рд░ рдбреЛрдореЗрди AF_INET рдХреЛ рд╕реМрдВрдкрд╛, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдХреЙрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА (рдЖрдИрдкреАрд╡реА 4) рдЖрдзрд╛рд░рд┐рдд рдЕрдВрддрд░-рдХрд╛рд░реНрдпрдХрд╛рд░реАред рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╕реЙрдХреЗрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ - рд╕реЙрдХреЗрдЯ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡реЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (SOCK_STREAM - рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ, SOCK_DGRAM - рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо)ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реЙрдХреЗрдЯ рдкреНрд░рдХрд╛рд░ SOCK_RAW рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рд╢рд╛рдпрдж рдирд┐рдпрдореЛрдВ рд╕реЗ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдЪрд▓рди рд╣реИ рдЬрдм рджреВрд╕рд░реЗ рддрд░реНрдХ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрд╛ рд╢рдмреНрджрд╛рд░реНрде рдЗрддрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдЕрдВрдд рдореЗрдВ, рддреАрд╕рд░рд╛ рддрд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рд╕реВрдЪреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рдХреЙрд▓ рдореЗрдВ рддреАрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓ /usr/src/linux-*/include/linux/in.h рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ * рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ IPPROTO_TCP, IPPROTO_UDP, IPPROTO_ICMP, IPPOROTO_IGMP, IPPROTO_RAW рд╣реИрдВред
рдЬрдм рдЖрдк рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рддреБрд░рдВрдд рдЙрдирдХреА рдХрдо рд╕реЗ рдХрдо рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рддреЗ рд╣реИрдВ - рдХреИрд╕реЗ рдбреЗрдЯрд╛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рд╣реИ рдФрд░ рдЖрдИрдкреА рд╣реЗрдбрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд╣рди рдкрд░рдд рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рд╕реАрдзреЗ рдЖрдИрдкреА рдбрд╛рдЯрд╛рдЧреНрд░рд╛рдо рдХреЗ рдкреЗрд▓реЛрдб рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП, рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рднреЗрдЬрдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд╣реЗрдбрд░ рд╕рд╣рд┐рдд рдкреВрд░реЗ рдЖрдИрдкреА рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдХреЗ рд╣реЗрдбрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪ рдЕрднреА рднреА рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЖрд╡реЗрджрди рдХрднреА рднреА рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдПрдХ рдЕрдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг (рдпрд╛рдиреА, IPv4 рд╕реЗ рдЕрд▓рдЧ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг)ред

рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрддреЗ рд╕рдордп, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИ - рдЖрдИрдкреА рд╣реЗрдбрд░ рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдмрдирд╛рдиреЗ рдпрд╛ рд╕реНрд╡рдпрдВ рд╣реЗрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред IP_HDRINCL рд╕реЙрдХреЗрдЯ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рджреВрд╕рд░рд╛ рд╕рдВрднрд╡ рд╣реИ (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрдм рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдЖрдк рд╕реЙрдХреЗрдЯ () рдХреЙрд▓ рдореЗрдВ рддреАрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ IPPROTO_RAW рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рднрд▓реЗ рд╣реА IP_HDRINCL рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд░реНрдиреЗрд▓ рдЕрднреА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ "рд╕рд╣рд╛рдпрддрд╛" рдХрд░реЗрдЧрд╛ред рддреЛ, рдХреБрд▓ рд▓рдВрдмрд╛рдИ рдФрд░ рд╣реЗрдбрд░ рдЪреЗрдХрд╕рдо рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдХреЗ рд╣реЗрдбрд░ рдлрд╝реАрд▓реНрдб рд╣рдореЗрд╢рд╛ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╕реНрд░реЛрдд рдкрддрд╛ рдФрд░ рдкрд╣рдЪрд╛рди рдлрд╝реАрд▓реНрдб рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рднрд░рд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рд╣реЗрдбрд░ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ "рдЦрд░рд╛рдм" рд╕реНрд░реЛрдд рдЖрдИрдкреА рдкрддреЗ рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╕реАрдорд┐рдд рдкреИрдХреЗрдЯ рдХреИрдкреНрдЪрд░ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЯ рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддрд┐ рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рди рд╣реА рдкрд╛рд░рдЧрдорди (рд░реВрдЯ) рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ, рдХрд┐рд╕реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЙрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдХрдЪреНрдЪрд╛ IP рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдПрдХ рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрдИрдбреА рд╕реЙрдХреЗрдЯ рдореЗрдВ рддреАрд╕рд░реЗ рддрд░реНрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ (рд╕рд┐рд╕реНрдЯрдо рд╕реЙрдХреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдФрд░ рд╕рднреА рдЖрдИрдкреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдирд╣реАрдВред рдЕрдВрдд рдореЗрдВ, FreeBSD (рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ рдирд╣реАрдВ) рдореЗрдВ рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдЖрдИрдкреА рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдХрд░реНрдиреЗрд▓ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ (рдЖрдИрд╕реАрдПрдордкреА рдФрд░ рдЖрдИрдЬреАрдПрдордкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреИрдХреЗрдЯ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕реЗ рд╣рдо рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдПрдХ рдЖрдИрдкреА рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрдереНрдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рдпрджрд┐ рдПрдХ рд╣реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реЙрдХреЗрдЯ рдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЯ рдХреА рдЕрдкрдиреА рдкреНрд░рддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред
рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдХреИрдирд░ рд▓рд┐рдЦрддреЗ рд╕рдордп рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:
int socket = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
рдлрд┐рд░ рд╣рдореЗрдВ рдмрд╕ рдПрдХ рдЯреАрд╕реАрдкреА рд╕реЗрдЧрдореЗрдВрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдПрдХ рдХрдЪреНрдЪрд╛ рд╕реЙрдХреЗрдЯ рднреЗрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╕реНрд░реЛрдд рдЖрдИрдкреА-рдПрдбреНрд░реЗрд╕ рдХреЛ рдлрд╝реЗрдХ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛, рдЬреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рдо рдЖрдПрдЧрд╛ред рдЗрд╕реА рддрд░рд╣, рдЖрдк рдХрд░реНрдиреЗрд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреИрдХ рдХреЛ рдлрд╝реНрдпреВрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд╣рди-рд╕реНрддрд░ рдХреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдорд╛рдиреНрдп рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдкрд░ рдЯреАрд╕реАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рдд рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рд╣рдо рдЯреАрд╕реАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХрд╛рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдЗрд╕рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рдЕрдзрд┐рдХрддрдо рдЬреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ (рд▓рд┐рдирдХреНрд╕ рдкрд░) рдХреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрд▓рдЧ рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдЯреАрд╕реАрдкреА рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ, рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдкрд╣рд▓реВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдРрд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╣реА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ICMP рдФрд░ IGMPред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЗрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ:
int socket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); int socket = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
рдпрд╣ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдЬреИрд╕реЗ рдкрд┐рдВрдЧ, рдХреНрд▓рд╛рд╕рд┐рдХ рдЯреНрд░реИрд╕рд░реНрдЯ (ICMP) рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдЬреЛ рдЖрдкрдХреЛ IGMP рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рднреА рддрдереНрдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд░рдХреЗ, рд╣рдо рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдпрд╣ рддрдВрддреНрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ:
- рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдореЗрдВ рд╕реНрд░реЛрдд рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджреЗрдЧрд╛ рдЖрд╡реЗрджрди
- рдЕрд▓рдЧ рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдЯреАрд╕реАрдкреА рд╕реЗрдЧрдореЗрдВрдЯ рдФрд░ рдпреВрдбреАрдкреА рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди (рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдХреИрдирд░ рдореЗрдВ рдЖрд╡реЗрджрди рдкрд╛рддрд╛ рд╣реИ)
- рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (IP рд╣реЗрдбрд░ рд╕рд╣рд┐рдд)
- рдХрд░реНрдиреЗрд▓ рд╕реНрдЯреИрдХ рдлрд╝реНрд▓реЛрдЬрд╝рд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ
- рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рд╕реЗрд╡рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╣реА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (ICMP, IGMP, рдЖрджрд┐)
рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╣рдорд▓реЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓реЗрдЦрди рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереАред рдмрд▓реНрдХрд┐, рдЗрд╕ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдХрд╛рд░рдг рдХрд╛рдлреА рд╢рд╛рдВрддрд┐рдкреВрд░реНрдг рд▓рдХреНрд╖реНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ, рдЕрдВрддрддрдГ, рд╣реИрдХрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдЖрд╡реЗрджрди рдорд┐рд▓рд╛ рд╣реИред
рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХSOCK_RAW рдбрд┐рдорд┐рд╕реНрдЯрд┐рдлрд╝рд╛рдЗрдб
http://sock-raw.org/papers/sock_raw4.2bsd рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЛрдЯреНрд╕ (рд╕рдВрд╢реЛрдзрд┐рдд рдЬреБрд▓рд╛рдИ, 1983)
http://www.eecs.berkeley.edu/Pubs/TechRpts/1983/CSD-83-146рд▓рд┐рдирдХреНрд╕ рдореИрди рдкреЗрдЬ, SOCKET (2)
http://man7.org/linux/man-pages/man2/socket.2.htmlрд▓рд┐рдирдХреНрд╕ рдореИрди рдкреЗрдЬ, SOCKET (7)
ttp: //man7.org/linux/man-pages/man7/socket.7.htmlрд▓рд┐рдирдХреНрд╕ рдореИрди рдкреЗрдЬ, рд░реЙ (7)
http://man7.org/linux/man-pages/man7/raw.7.html