HTTPS рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ (рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░) рдпрд╛ рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рд▓рд┐рдЦрдирд╛ рд╕реАрдЦрдирд╛

рдпрд╣ рд▓реЗрдЦ рдЙрди рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рд╣реИ рдЬреЛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ HTTPS рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рдкрд╛рд░рджрд░реНрд╢реА рд╕рдореАрдкрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рдЫреЛрдЯреА рддрд╛рд▓рд┐рдХрд╛ рддрд╛рдХрд┐ рдЖрдк рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдЧреЗ рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реИ:
  1. рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рдиред
  2. рдХреНрд▓рд╛рдЗрдВрдЯ - рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рдиред
  3. рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдирд╛ред
  4. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди (рдиреЗрдЯрд▓рд┐рдВрдХ) рд╕реЗ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛

PS рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдмрд╕ HTTP рдФрд░ HTTPS рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд╕ HTTP рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рд░рджрд░реНрд╢реА рдкреЛрд░реНрдЯ 3128 рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд╡рд┐рдб, рдФрд░ рд╢рд┐рдлреНрдЯрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ (рдмрдирд╛рдПрдВ) рдФрд░, рд╕рдлрд▓ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ / рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдВрдн рдХрд░реЗрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рд╕рдВрдХрд▓рди рд╕реЗ рдкрд╣рд▓реЗ shifter.h рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рдЖрдИрдЯреА рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рднреА рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣, рдореИрдВ рднреА рдХреЛрд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣рд╛рдВ, рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд╖реЗрддреНрд░ рд╕реНрд╡рдпрдВ рдкреНрд░рдХрдЯ рд╣реБрдЖред рдпрджрд┐ рдЖрдк Google рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ HTTP рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ HTTPS рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдЫ рдЖрд╢реНрд╡рд╕реНрдд рд╣реИрдВ рдХрд┐ HTTPS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рдирд╣реАрдВ рд╣реИред рдФрд░ рд╡рд╣ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдм рдЗрд╕ рд▓реЗрдЦ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕реЗрд╡рд╛ рдХрд░рддрд╛ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реАрдзреЗ HTTP рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рдореНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддрд╛ рд╣реИ:
GET / HTTP/1.1 Host: www.google.ru тАж 

рдЬрдм рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреВрд░реНрдг рдкрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ:
 GET http://www.google.ru/ HTTP/1.1 Host: www.google.ru тАж 

рдпрджрд┐ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдкреВрд░реНрдг рдкрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ, рддреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред
рдореИрдВ HTTPS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдХрд╣реВрдБрдЧрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрд╕рдПрд╕рд╕реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб HTTP рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдареАрдХ рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдмреАрдЪ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ HTTP рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ HTTPS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЙрд╕ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд╣ HTTP рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ:
 CONNECT mail.google.com:443 HTTP/1.1 Host: mail.google.com тАж 

рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 HTTP/1.0 200 Connection established 

рдирддреАрдЬрддрди, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рдЯреАрдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореЗрдЬрдмрд╛рди рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░, рддрджрдиреБрд╕рд╛рд░, рд░рд┐рд╡рд░реНрд╕ рд╣рд╕реНрддрд╛рдВрддрд░рдгред
рдЬрдм рдкрд╛рд░рджрд░реНрд╢реА рдкрд░рджреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдкрд░ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдЗрддрдиреА рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред
HTTP рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

рдмреЗрд╢рдХ, рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЙрдХреНрд╕реА, рдЬреЛ рдЕрдкрдиреЗ рдкреЛрд░реНрдЯ 3128 рдкрд░ рдПрдХ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕реЗ рдЖрдЧреЗ Google рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Google рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рдВрдмрдВрдз рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реНрдХреАрдо рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИред рдЗрд╕ рдЖрд░реЗрдЦ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ NAT рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рдкреИрдХреЗрдЯ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░рд╛рдп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рдХреЛ рдХрд┐рд╕рдХреЗ рдкрд╛рд╕ рднреЗрдЬрд╛ рдЬрд╛рдПред HTTP рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдЫ рдкреНрд░реЙрдХреНрд╕реА рдЕрд╡реИрдз рд░реВрдк рд╕реЗ HTTP рдЕрдиреБрд░реЛрдз рд╢реАрд░реНрд╖рдХ рдХреЗ HOST рдХреНрд╖реЗрддреНрд░ рд╕реЗ рд╕реВрдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, HOST рдореЗрдВ рд╣реЛрд╕реНрдЯ рдирд╛рдо рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, HOST рдореЗрдВ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред HTTPS рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдмрд┐рд▓реНрдХреБрд▓ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреИрдХреЗрдЯ рдХреЛ рдХрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреБрд░рдВрдд рдПрдХ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ NAT рдкрд░ рдирдЬрд╝рд░ рд░рдЦреЗрдЧрд╛ рдФрд░ рджреЗрдЦреЗрдЧрд╛ рдХрд┐ рдбреЗрдЯрд╛ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рдлрд┐рд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, iptables iptables рдореЗрдВ рд╣реА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рд╕рдорд╛рди, рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛рдПрдЧрд╛ред рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд┐рдЦреЗрдЧрд╛:

рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреЗ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ (рдореЙрдбреНрдпреВрд▓ рд╢рд┐рдлреНрдЯрд░) рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкрд░рдд (рд╢рд┐рдлреНрдЯрд░) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдЬреЛ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдЧрд╛ред

рдХреНрд▓рд╛рдЗрдВрдЯ - рд╕рд░реНрд╡рд░ рдПрдкреНрд▓реАрдХреЗрд╢рди (рд╢рд┐рдлреНрдЯрд░)


рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╢рд┐рдлреНрдЯрд░ рдХрд╣рд╛ рд╣реИред рд╢рд┐рдлреНрдЯрд░ рдЕрдкрдиреЗ рдкреЛрд░реНрдЯ рдкрд░ рд▓рдЯрдХрд╛рдПрдЧрд╛ рдФрд░, рдЬрдм рдХреЛрдИ рдЙрд╕рдХреЗ рд╕рд╛рде tcp рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛, рддреЛ рд╡рд╣ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдПрдХ tcp рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕реЗ CONNECT (HTTP) рд╡рд┐рдзрд┐ рднреЗрдЬреЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╡рд╣ рдХреЗрд╡рд▓ рдЗрди рджреЛ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ рд╕рдЯреАрдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ред рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдпрд╛ рдкреНрд░реЙрдХреНрд╕реА рдЗрд╕рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реЙрдХреЗрдЯ рдХреА рдЗрд╕ рдЬреЛрдбрд╝реА рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред
рдХрдиреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЧреНрд░рд╛рд╣рдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд┐рдлреНрдЯрд░ рдиреЗрдЯрд┐рдВрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбреНрдпреВрд▓ рд╢рд┐рдлреНрдЯрд░ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдореЗрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдбреЗрдЯрд╛ (HTTPS) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХрдИ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рд╕реЙрдХреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╢рд┐рдлреНрдЯрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ред

рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рд╢рд┐рдлреНрдЯрд░


рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреНрдпрд╛ рд╣реИ, рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЬреЛ рдПрдХ рдмрд╛рд░ рддрдм рдЖрдПрдЧрд╛, рдЬрдм рдореЙрдбреНрдпреВрд▓ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд▓реЛрдб рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рд╣реА рд╢рдЯрдбрд╛рдЙрди рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкрд┐рдЫрд▓реА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд╢рд╛рди рдХреЛ рди рдЫреЛрдбрд╝реЗрдВ рдЬрдм рдореЙрдбреНрдпреВрд▓ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдЙрддрд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдп <linux / рдореЙрдбреНрдпреВрд▓.h>: <linux / init.h> рдореЗрдВ рджреЛ рдореИрдХреНрд░реЛрдЬрд╝ рдореЙрдбреНрдпреВрд▓_рдЗрдирд┐рдЯ рдФрд░ рдореЙрдбреНрдпреВрд▓_рдПрдХреНрд╕рд┐рдЯ рд╣реИрдВ , рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рд▓реЗрддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рдирд╛рдо рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ MODULE_AUTHOR , MODULE_DESCRIPTION , MODULE_LICENSE рднреА рд╣реИрдВ :) рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЖрдЙрдЯрдкреБрдЯ рдлрдВрдХреНрд╢рди int printk (const char * fmt, ...) рднреА рд╣реИ <linux \ kern.h>: <linux \ printk.h> ред рдпрд╣ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд┐рдВрдЯрдл (..) рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрджреЗрд╢ рддрджрдиреБрд╕рд╛рд░ рд▓реЙрдЧ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЖрдк рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП dmesg рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╕рдВрджреЗрд╢ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 #define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "<2>" /* critical conditions */ #define KERN_ERR "<3>" /* error conditions */ #define KERN_WARNING "<4>" /* warning conditions */ #define KERN_NOTICE "<5>" /* normal but significant condition */ #define KERN_INFO "<6>" /* informational */ #define KERN_DEBUG "<7>" /* debug-level messages */ #define KERN_DEFAULT "<d>" /* Use the default kernel loglevel */ 

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрдВрдХрд╛рд▓ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ:
 #include <linux/module.h> #include <linux/kernel.h> MODULE_AUTHOR("Denis Dolgikh <sindo@sibmail.com>"); MODULE_DESCRIPTION("Module for the demonstration"); MODULE_LICENSE("GPL"); int Init(void) { printk(KERN_INFO "Init my module\n"); printk("Hello, World!\n"); return 0; } void Exit(void) { printk(KERN_INFO "Exit my module\n"); } module_init(Init); module_exit(Exit); 

рдореИрдВ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПред рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ Ubuntu 11.10 (x86) рдХрд░реНрдиреЗрд▓ 3.0 рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / lib / рдореЙрдбреНрдпреВрд▓ / [рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг] рд╣реИ / рдЗрд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╣реИрдВред рд╡рд╣рд╛рдВ рдПрдХ рдмрд┐рд▓реНрдб рднреА рд╣реИ - рдпрд╣ рдХрд░реНрдиреЗрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (рдХрд░реНрдиреЗрд▓-рд╣реЗрдбрд░реНрд╕) рдХреЗ рд╣реЗрдбрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рд╣реИ, рдЬреЛ / usr / src / linux-рд╣реЗрдбрд░реНрд╕- [рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг] / рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдХрд░реНрдиреЗрд▓-рд╣реЗрдбрд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ( sudo apt-get install linux-headers- [рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг] )ред рдЖрдк рдЬрд┐рд╕ рд╡рд░реНрддрдорд╛рди рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк uname тАУr рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд╕рдВрдХрд▓рд┐рдд рдореЙрдбреНрдпреВрд▓ рдареАрдХ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВ, рдФрд░ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдХрдлрд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВред рдЖрдЗрдП рджреЛ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдПрдВ: рд╕рднреА (рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг) рдФрд░ рд╕реНрд╡рдЪреНрдЫ (рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдлрд╛рдИ), рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: рдХрд░реНрдиреЗрд▓-рд╣реЗрдбрд░ рд╕реЗ рдореЗрдХрдлрд╛рдЗрд▓ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╕рд╛рдл ред
 #        # module_test.o тАУ ,       module_test. obj-m += module_test.o #  Makefile  kernel-headers   -, #     /lib/modules/[ ]/build #     modules      obj-m # M=$(PWD)   ,      all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

рдЕрдм рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдореЗрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЗрдХ рдХреНрд▓реАрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╛рдл рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рддреИрдпрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдореЙрдбреНрдпреВрд▓_рдЯреЗрд╕реНрдЯ.рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ , рдЬрд┐рд╕реЗ рддреБрд░рдВрдд insmod/module_test.ko рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ - modprobe рдореЙрдбреНрдпреВрд▓_test рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдореЙрдбреНрдпреВрд▓_test.ko рдореЙрдбреНрдпреВрд▓ рдХреЛ / lib / рдореЙрдбреНрдпреВрд▓ / [рдХрд░реНрдиреЗрд▓ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг] / [рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛] / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдЬреИрд╕реЗ , рдкреНрд░рдореЛрдж рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦреЗрдВ рдпрд╣ рдХрдорд╛рдВрдб / рдирд┐рд░реНрднрд░рддрд╛ / рдореЙрдбреНрдпреВрд▓ / рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ modprobe рдмрд┐рдирд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЬреЛрдбрд╝реЗ рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рдирд╣реАрдВ рджреЗрдЦреЗрдЧрд╛ ред Insmod рдФрд░ modprobe рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, modprobe рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди insmod рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдХрд┐рд╕реА рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрд░реНрдиреЗрд▓ рд╕реЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдирд┐рдХрд╛рд▓реЗрдВ: rmmod рдореЙрдбреНрдпреВрд▓_test ред рдореЙрдбреНрдпреВрд▓ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦреЗрдВ: modinfo mod_test рдпрд╛ modinfo ./module_test.ko ред

рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рдФрд░ рдЗрд╕рд▓рд┐рдП HTTPS рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп DNAT (iptables) рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЙрдбреНрдпреВрд▓ рд╕реНрдХреИрди рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рдмрдирд╛рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧреА ред (рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХрдо рд╕реЗ рдХрдо рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ ) рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рдкрде рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ <linux / netfilter.h> 5 рд╣реБрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ 5 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
  1. NF_INET_PRE_ROUTING - рдлрд╝рдВрдХреНрд╢рди рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдЗрдирдкреБрдЯ рдкреИрдХреЗрдЯ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдкреИрдХреЗрдЯ рдкрд╣рд▓реЗ рд╣реА рд╕рд░рд▓ рдЪреЗрдХ рдкрд╛рд╕ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ (рдкреИрдХреЗрдЯ рдЦреЛ рдирд╣реАрдВ рдЧрдП рд╣реИрдВ, рдЖрдИрдкреА рдЪреЗрдХрд╕рдо рдареАрдХ рд╣реИ, рдЖрджрд┐);
    рдкреИрдХреЗрдЯ рддрдм рд░реВрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЯ рдХрд┐рд╕реА рдЕрдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ рдпрд╛ рдирд╣реАрдВред рд░реВрдЯрд┐рдВрдЧ рдПрдХ рдкреИрдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдпрд╣ рдирд┐рдпрдорд┐рдд рдирд╣реАрдВ рд╣реИред
  2. NF_INET_LOCAL_IN - рдЕрдЧрд░ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рддреЛ рдкреИрдХреЗрдЬ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ;
  3. NF_INET_FORWARD - рдЬрдм рдПрдХ рдкреИрдХреЗрдЯ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд░реВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  4. NF_INET_LOCAL_OUT - рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд▓;
  5. NF_INET_POST_ROUTING - рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкреИрдХреЗрдЯ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБред

рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдЗрди 5 рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рднреА рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред <Linux / netfilter_ipv4.h> рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 enum nf_ip_hook_priorities { NF_IP_PRI_FIRST = INT_MIN, NF_IP_PRI_CONNTRACK_DEFRAG = -400, NF_IP_PRI_RAW = -300, NF_IP_PRI_SELINUX_FIRST = -225, NF_IP_PRI_CONNTRACK = -200, NF_IP_PRI_MANGLE = -150, NF_IP_PRI_NAT_DST = -100, NF_IP_PRI_FILTER = 0, NF_IP_PRI_SECURITY = 50, NF_IP_PRI_NAT_SRC = 100, NF_IP_PRI_SELINUX_LAST = 225, NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX, NF_IP_PRI_LAST = INT_MAX, }; 

рдпрд╣ рд╕реВрдЪреА рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ DNAT рдореЗрдВ -100 рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ <-100 рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛> -100 рд╣реИ, рддреЛ рдпрд╣ рдЧрдВрддрд╡реНрдп рдЖрдИрдкреА рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ (рдЧрдВрддрд╡реНрдп) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрджрд▓ рдЧрдпрд╛ рд╣реИред
5 рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдЬреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рдореНрди рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЯ рдХреЗ рдЖрдЧреЗ рдХреЗ рднрд╛рдЧреНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:
 #define NF_DROP 0 /* discarded the packet */ #define NF_ACCEPT 1 /* the packet passes, continue iterations */ #define NF_STOLEN 2 /* gone away */ #define NF_QUEUE 3 /* inject the packet into a different queue (the target queue number is in the high 16 bits of the verdict) */ #define NF_REPEAT 4 /* iterate the same cycle once more */ #define NF_STOP 5 /* accept, but don't continue iterations */ 

рдореЗрд░реЗ рдирд┐: рд╢реБрд▓реНрдХ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд▓рдЧреЗрдЧрд╛:рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рдкреИрдХреЗрдЬ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рдкрд░, рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рд╣рдордиреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдЕрдм рд╣рдо рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЖрдЗрдП рдЗрд╕реЗ рд╣реБрдХ_рдлрдВрдХ рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреИрдХреЗрдЯреЛрдВ рдХреЛ рджреЗрдЦреЗрдЧрд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдирд░рдЬрд┐рд╕реНрдЯрд░реНрдб рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдХрд░реНрдиреЗрд▓ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
 #include <linux/module.h> #include <linux/kernel.h> #include <linux/netfilter.h> #include <linux/netfilter_ipv4.h> /*       ip  */ struct nf_hook_ops bundle; int Init(void) { printk(KERN_INFO "Start module Shifter\n"); /*     hook  */ /*   ,     */ bundle.hook = Hook_Func; /*    ,  hook */ bundle.owner = THIS_MODULE; /*    */ bundle.pf = PF_INET; /* ,       */ bundle.hooknum = NF_INET_PRE_ROUTING; /*       */ bundle.priority = NF_IP_PRI_FIRST; /*  */ nf_register_hook(&bundle); return 0; } void Exit(void) { /*    hook  */ nf_unregister_hook(&bundle); printk(KERN_INFO "End module Shifter\n"); } module_init(Init); module_exit(Exit); 

рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ рд╣реБрдХ_рдлрдВрдЪ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реИ ред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
 unsigned int Hook_Func(uint hooknum, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *) ) { /*    firewall */ /*    ()     :) */ return NF_DROP; } 

рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдЕрдм рдкреИрдХреЗрдЬ рд╕реНрдЯреНрд░рдХреНрдЪрд░ sk_buff * skb рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХред
sk_buff рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдлрд░ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдХреЛрдИ рдкреИрдХреЗрдЯ рдЖрддрд╛ рд╣реИ рдпрд╛ рдЙрд╕реЗ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, sk_buff рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдкреИрдХреЗрдЯ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА, рдХрд╣рд╛рдБ, рдХрд╣рд╛рдБ, рдХрд┐рд╕ рд▓рд┐рдП ... рдкреИрдХреЗрдЯ рдХреА рдпрд╛рддреНрд░рд╛ рдХреЗ рджреМрд░рд╛рди, sk_buff рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреИрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдПрдХ рдкреИрдХреЗрдЯ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдбреЗрдЯрд╛ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрд░рдЪрдирд╛ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореЗрдореЛрд░реА рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рддреА рд╣реИред
Sk_buff рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди <linux / skbuff.h> рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрдЦрдж рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
Tcp рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдк рджреЛ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпреЗ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ iphdr рдФрд░ рд╕рдВрд░рдЪрдирд╛ tcphdr рд╣реИрдВ ред
рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпреЗ рд╕рдВрд░рдЪрдирд╛рдПрдБ рдЖрдИрдкреА тАЛтАЛрд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдЯреАрд╕реАрдкреА рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде ред рдЖрдк skb_buff рд╕реЗ рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 static inline unsigned char *skb_network_header(const struct sk_buff *skb); static inline unsigned char *skb_transport_header(const struct sk_buff *skb); 

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ рдкрд╛рдардХ рд╕реЗ рдЕрдкреАрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ sk_buff рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХрд┐рд╕рдиреЗ transport_header рд╕реВрдЪрдХ рдХреЛ рд╕реЗрдЯ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ NF_INET_PRE_ROUTING рдФрд░ NF_INET_LOCAL_IN (рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде) рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдореИрдВ tbp рд╣реИрдбрд░ рдкрд░ skb_transport_header рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЗрд╕рдиреЗ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ sk_buff-> рдбреЗрдЯрд╛ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ transport_header рдХреЗ рд▓рд┐рдП рдСрдлрд╝рд╕реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдерд╛, void skb_set_transport_header (skb, рдСрдлрд╝рд╕реЗрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
рдЙрд▓реНрд▓рд┐рдЦрд┐рдд sk_buff-> рдбреЗрдЯрд╛ рдкреЙрдЗрдВрдЯрд░ рдкреИрдХреЗрдЬ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ, рдЕрд░реНрдерд╛рддред рдИрдерд░рдиреЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рдж рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреБрд░рдВрдд рдЖрдИрдкреА рд╣реЗрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдЯреАрд╕реАрдкреА рд╣реЗрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдкреИрдХреЗрдЬ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рди рдХреЗрд╡рд▓ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рднреА рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдмрджрд▓рддреЗ рд╕рдордп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЗрд╖рдХ рдпрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХрд╛ рдЖрдИрдкреА рдкрддрд╛, рдЖрдИрдкреА рдкреИрдХреЗрдЯ рд╣реЗрдбрд░ рдореЗрдВ рдЪреЗрдХрд╕рдо рднреА рдкреБрдирд░реНрдЧрдгрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЧрдВрддрд╡реНрдп рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ рдЬрдм рдпрд╣ рдПрдХ рдЖрдИрдкреА-рдЯреАрд╕реАрдкреА рдкреИрдХреЗрдЯ рдХреЛ 443 (HTTPS) рдкреЛрд░реНрдЯ рдФрд░ SYN рдзреНрд╡рдЬ рд╕реЗ рдпреБрдХреНрдд рджреЗрдЦрддрд╛ рд╣реИ, рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ HTTPS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрдирд▓ рдпрд╛ RST рдлрд╝реНрд▓реИрдЧ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЯреЛрдВ рдХреЛ рддрдм рд╣рдЯрд╛рдПрдВ рдЬрдм рдХрд╣рд╛ рдЬрд╛рдП рдХрд┐ tcp рдХрдиреЗрдХреНрд╢рди рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЕрдм рдЗрд╕ IP рдкрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
 #include <linux/skbuff.h> #include <linux/ip.h> #include <linux/tcp.h> #define uchar unsigned char #define ushort unsigned short #define uint unsigned int /* Hook_Func - ,       */ /*  IP  ,  : */ /* -  tcp  */ /* -   443  (HTTPS) */ /* -   SYN ( tcp ) */ uint Hook_Func(uint hooknum, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *) ) { /*      ip   */ struct iphdr *ip; /*      tcp   */ struct tcphdr *tcp; /*    IP  */ if (skb->protocol == htons(ETH_P_IP)) { /*      IP */ ip = (struct iphdr *)skb_network_header(skb); /*    IP  4   TCP  */ if (ip->version == 4 && ip->protocol == IPPROTO_TCP) { /*        TCP  */ /* ip->ihl -  IP   32-  */ skb_set_transport_header(skb, ip->ihl * 4); /*      TCP */ tcp = (struct tcphdr *)skb_transport_header(skb); /*     443  (HTTPS) */ if (tcp->dest == htons(443)) { /*    SYN,   IP   */ if (tcp->syn) AddTable((uint)ip->saddr, (ushort)tcp->source, (uint)ip->daddr); /*    FIN  RST,    IP   */ if (tcp->fin || tcp->rst) DelTable((uint)ip->saddr, (ushort)tcp->source, (uint)ip->daddr); } } } /*     */ return NF_ACCEPT; } 

AddTable рдФрд░ DelTable рдХреЗ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЬреЛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдИрдкреА рдФрд░ рдкреНрд░реЗрд╖рдХ рдХреЗ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рд╕реЗ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╢рд┐рдлреНрдЯрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рд╢рд┐рдлреНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХреЗ рдФрд░ рдЖрдИрдкреА рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкреЛрд░реНрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реАрдбрдЯреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗ , рдЬрд┐рд╕ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рд╕реЗ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЖрдИрдкреА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рд░ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди ( KeyHash ) рдЗрдирдкреБрдЯ рдкрд░ рдкреНрд░реЗрд╖рдХ рдкреЛрд░реНрдЯ рдФрд░ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╕рд░рдгреА рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЧрдВрддрд╡реНрдп рдЖрдИрдкреА рдкрддрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреИрдЯ рдХреЗ рдкреАрдЫреЗ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ 255.255.255.0 рдХреЗ рдорд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдмрдиреЗрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреНрд░реЗрд╖рдХ рдХреЗ рдЖрдИрдкреА рдХреЗ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдмрд╛рдЗрдЯ рджреЛ рдкреЛрд░реНрдЯ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде 3 рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕реБрдкрд░рд┐рдВрдкрд▓ рд╣реИред рдирддреАрдЬрддрди, рдореИрдВ рд╕рд░рдгреА рдХреЛ 0x1FFFFF (~ 8 рдПрдордмреА) рдЖрдХрд╛рд░ рдореЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдм, рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдХрдо рд╕реЗ рдХрдо 8 рдПрдордмреА рдореЗрдореЛрд░реА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛, рдФрд░ рдпрд╣ рдХреБрдЫ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЯрдХреНрдХрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ :) рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рднреБрдЧрддрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрд▓рдЯреЗрдмрд▓ рдЖрдо рддреМрд░ рдкрд░ рдЦрд╛рд▓реА рд╣реЛрддрд╛ рд╣реИред
 /*     IP   */ #define MaxTable 0x1FFFFF uint Table[MaxTable]; /* KeyHash -     */ /*    IP    */ uint KeyHash(uint src_IP, ushort src_Port) { return (uint)(((src_IP & 0xFF000000) >> 11) ^ (uint)src_Port) % MaxTable; } /* AddTable -  IP     */ /*     IP    */ void AddTable(uint src_IP, ushort src_Port, uint dst_IP) { Table[KeyHash(src_IP, src_Port)] = dst_IP; } void DelTable(uint src_IP, ushort src_Port, uint dst_IP) { /*         IP  */ /*      */ } /* ReadTable -  IP   */ /*    IP    */ uint ReadTable(uint src_IP, ushort src_Port) { return Table[KeyHash(src_IP, src_Port)]; } 

рдЗрд╕рдХреЗ рд╕рд╛рде, рд▓реЗрдЦ рдХрд╛ рдпрд╣ рд▓рдВрдмрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд╢рд┐рдлреНрдЯрд░ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдХреЛ рд╢рд┐рдлреНрдЯрд░ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди (рдиреЗрдЯрд▓рд┐рдВрдХ) рд╕реЗ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛


рдЕрдм рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╢рд┐рдлреНрдЯрд░ рдФрд░ рд╢рд┐рдлреНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╕реЙрдХреЗрдЯ рдмрдирд╛рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╢рд┐рдлреНрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╡рд┐рдирд┐рдордп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рд░рд▓ рд╣реЛрдЧрд╛ред рд╢рд┐рдлреНрдЯрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдИрдкреА рдХреЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреЛрд░реНрдЯ рдХреЗ 2 рдмрд╛рдЗрдЯреНрд╕ рднреЗрдЬреЗрдЧрд╛, рдФрд░ рдореЙрдбреНрдпреВрд▓ рдЕрдкрдиреЗ рдЯреЗрдмрд▓ рд╕реЗ рд▓рд┐рдП рдЧрдП рдЖрдИрдкреА рдЧрдВрддрд╡реНрдп рдХреЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЬрд╡рд╛рдм рджреЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд▓рд┐рдВрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╢реАрд░реНрд╖ рд▓реЗрдЦ <linux / netlink.h> рдХрд╕реНрдЯрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП /usr/include/linux/netlink.h рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ / usr / src / рд▓рд┐рдирдХреНрд╕ headers- [ рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг] / рд╢рд╛рдорд┐рд▓ / linux / рдиреЗрдЯрд▓рд┐рдВрдХред h рдХреЗ рдХрдИ рдЕрдВрддрд░ рд╣реИрдВ ред

рдпреВрдЬрд░ рд╕реНрдкреЗрд╕ рдореЗрдВ рдиреЗрдЯрд▓рд┐рдВрдХ

рдиреЗрдЯрд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдкрдХреНрд╖ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
RFC 3549 - рд▓рд┐рдирдХреНрд╕ рдиреЗрдЯрд▓рд┐рдВрдХ рдЖрдИрдкреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдиреЗрдЯрд▓рд┐рдВрдХ рдХреЗ
рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред рднрд╛рдЧ 1
рдиреЗрдЯрд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдирдХреНрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдореЙрдирд┐рдЯрд░
рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдмреАрдЪ рд╕реВрдЪрдирд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдиреЗрдЯрд▓рд┐рдВрдХ рд╕реЙрдХреЗрдЯ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЗрдВрдЯ рд╕реЙрдХреЗрдЯ (PF_NETLINK, рд╕реЙрдХреЗрдЯ_рдЯрд╛рдЗрдк, рдиреЗрдЯрд▓рд┐рдВрдХ_рдлреИрдорд┐рд▓реА);
рдХрд╣рд╛рдБ рдХреЗ рд░реВрдк рдореЗрдВ socket_type рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ SOCK_RAW , рдФрд░ SOCK_DGRAM ; рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдиреЗрдЯрд▓рд┐рдВрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдФрд░ рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ netlink_family рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдиреЗрдЯрд▓рд┐рдВрдХ рд╕рдореВрд╣ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред <Linux / netlink.h> , рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдХреЗ ред
рдиреЗрдЯрд▓рд┐рдВрдХ рд╕рдВрджреЗрд╢ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ msmsghdr (рдиреЗрдЯрд▓рд┐рдВрдХ рд╕рдВрджреЗрд╢ рд╣реЗрдбрд░) рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдзрд╛рд░рд╛ рд╣реИ ред рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░реАрдо рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ NLMSG_ * рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдиреЗрдЯрд▓рд┐рдВрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рд╕рдВрджреЗрд╢ рдбрд┐рд▓реАрд╡рд░реА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдпрд╛ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреИрдХреЗрдЯ рдХреЛ рдЧрд┐рд░рд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрд░рдЪрдирд╛
рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ sockaddr_nl, nlmsghdr (<linux / netlink.h>), iovec рдФрд░ msghdr (<sys / socket.h>) , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ -

рд╕рдВрд░рдЪрдирд╛рддреНрдордХ sockaddr_nl - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП netlink рдкрддреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░реЗрд╖рдХ рдпрд╛ рд░рд┐рд╕реАрд╡рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 struct sockaddr_nl { sa_family_t nl_family; /*   AF_NETLINK */ unsigned short nl_pad; /*   */ __u32 nl_pid; /*     0,    ,     */ __u32 nl_groups; /* netlink  32 multicast-. nl_groups    ,         ,      */ }; 

рд╕рдВрд░рдЪрдирд╛ nlmsghdr рдиреЗрдЯрд▓рд┐рдВрдХ рд╕рдВрджреЗрд╢ рд╣реИрдбрд░ рд╣реИ рдФрд░ рднреЗрдЬрд╛ / рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NLMSG_DATA (рд╕реНрдЯреНрд░рдХреНрдЪрд░ nlmsghdr *) рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред
 struct nlmsghdr { __u32 nlmsg_len; /*      */ __u16 nlmsg_type; /*   () */ __u16 nlmsg_flags; /*     */ __u32 nlmsg_seq; /*   (      ) */ __u32 nlmsg_pid; /*   (PID),   */ }; 

iovec рдПрдХ struct - рдореЗрдВ рд╣реИ msghdr , рдпрд╣ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ nlmsghdr ред
 struct iovec { void * iov_base; /*    (  nlmsghdr) */ size_t iov_len; /*  ()  */ }; 

рд╕рдВрд░рдЪрдирд╛ msghdr - рдПрдХ рдкрддрд╛ ( sockaddr_nl ) рдФрд░ рдбреЗрдЯрд╛ ( iovec ) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╣реЛрддрд╛ рд╣реИ
 struct msghdr { void * msg_name; /*     */ socklen_t msg_namelen; /*   */ struct iovec * msg_iov; /*    */ size_t msg_iovlen; /*   */ void * msg_control; /*      */ size_t msg_controllen; /*     */ int msg_flags; /*    */ }; 

рдХреБрдЫ рдиреЗрдЯрд▓рд┐рдВрдХ рдореИрдХреНрд░реЛрдЬрд╝ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 int NLMSG_ALIGN(size_t len); 
рдирд┐рдХрдЯрддрдо рдмрдбрд╝реЗ рдмреЙрд░реНрдбрд░-рд╕рдВрд░реЗрдЦрд┐рдд рдорд╛рди рдХреЗ рд▓рд┐рдП рд░рд╛рдЙрдВрдбреНрд╕ рдиреЗрдЯрд▓рд┐рдВрдХ рд╕рдВрджреЗрд╢ рдЖрдХрд╛рд░ред

 int NLMSG_LENGTH(size_t len); 
рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ nlmsgdr рд╣реЗрдбрд░ рдХреЗ nlmsg_len рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдорд╛-рд╕рдВрд░реЗрдЦрд┐рдд рдЖрдХрд╛рд░ рдорд╛рди рджреЗрддрд╛ рд╣реИред

 int NLMSG_SPACE(size_t len); 
рдореЗрдореЛрд░реА рдХрд╛ рдЖрдХрд╛рд░ (рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ) рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╢рдореНрд╕рдЧрдбреНрд░реНрд░ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛, рд╕рд╛рде рд╣реА рдиреЗрдЯрд▓рд┐рдВрдХ рдкреИрдХреЗрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЗрди рд▓рдВрдмрд╛рдИ (рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ) рдХрд╛ рдбреЗрдЯрд╛ред

 void *NLMSG_DATA(struct nlmsghdr *nlh); 
рдкрд╛рд╕ рдХрд┐рдП рдЧрдП nlmsghdr рд╣реЗрдбрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

 struct nlmsghdr *NLMSG_NEXT(struct nlmsghdr *nlh, int len); 
рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдХреЛ рдХрдИ рднрд╛рдЧреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдореИрдХреНрд░реЛ рдПрдХ рдмрд╣реБ-рднрд╛рдЧ рд╕рдВрджреЗрд╢ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд nlmsghdr рд╣реЗрдбрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд░реНрддрдорд╛рди рдПрдореНтАНрдореНтАНрд╕рдореИрдЧрдбреНрд░рд░ рд╣реЗрдбрд░ рдореЗрдВ NLMSG_DONE рдлреНрд▓реИрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП - рдЬрдм рд╕рдВрджреЗрд╢ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдлрд╝рдВрдХреНрд╢рди NULL рдирд╣реАрдВ рд▓реМрдЯрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрджреЗрд╢ рдмрдлрд╝рд░ рдХреЗ рд╢реЗрд╖ рднрд╛рдЧ рдХрд╛ рдЖрдХрд╛рд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрд╕реЗрдЬ рд╣реЗрдбрд░ рдХреЗ рдЖрдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдореИрдХреНрд░реЛ рдЗрд╕ рдорд╛рди рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред

 int NLMSG_OK(struct nlmsghdr *nlh, int len); 
TRUE рд▓реМрдЯрд╛рддрд╛ рд╣реИ (1) рдпрджрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рдбрд┐рд╕реНрд╕реЗрдХреНрд╢рди рд╕рдлрд▓ рд░рд╣рд╛ рд╣реИред

 int NLMSG_PAYLOAD(struct nlmsghdr *nlh, int len); 
Nlmsghdr рд╣реИрдбрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдиреЗрдЯрд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╢рд┐рдлреНрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ред

рдиреЗрдЯрд▓рд┐рдВрдХ рдХрд░реНрдиреЗрд▓ рд╕реНрдкреЗрд╕

рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдиреЗрдЯрд▓рд┐рдВрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХреБрдЫ рдЕрдВрддрд░ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, <linux / netlink.h> рд╕реЗ nlmsghdr рд╕рдВрд░рдЪрдирд╛ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА sk_buff рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рд╣реБрдЖ рд╣реИ рдЬреЛ рд╣рдорд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ ред рдФрд░ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рдирдП рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдореЙрдбреНрдпреВрд▓ рд╕реЙрдХреЗрдЯ рдЯрд╛рдЗрдк рд▓рдЧрддрд╛ рдирд╣реАрдВ рдкреВрд░реНрдгрд╛рдВрдХ , рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдЬреБрд░реНрд░рд╛рдм рд╕реЗ <рд╢реБрджреНрдз / sock.h> ред рд╕рдВрд░рдЪрдирд╛ рдЬреБрд░реНрд░рд╛рдм - рдмрд╣реБрдд рдмрдбрд╝реА рдореИрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдиреЗрдЯрд▓рд┐рдВрдХ рд╕реЙрдХреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, <linux / netlink.h> рдореЗрдВ netlink_kernel_create рдлрд╝рдВрдХреНрд╢рди рд╣реИ ред рдпрд╣ рди рдХреЗрд╡рд▓ рдПрдХ рдиреЗрдЯрд▓рд┐рдВрдХ рд╕реЙрдХреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛ рдЖрдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
 struct sock *netlink_kernel_create( struct net *net, int unit, unsigned int groups, void (*input)(struct sk_buff *skb), struct mutex *cb_mutex, struct module *module); 

рдиреЗрдЯрд▓рд┐рдВрдХ рд╕реЙрдХреЗрдЯ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ "рдлрд╝рдВрдХреНрд╢рди рдкрдВрдЬреАрдХрд░рдг" рдЙрдкрдпреЛрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ:
 void netlink_kernel_release(struct sock *sk); 

рд╣рдореЗрдВ <net / netlink.h> рд╕реЗ рднреА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА , рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдЕрджреНрднреБрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдмрд╕ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реВрдВрдЧрд╛:
 /** * nlmsg_new тАУ     netlink  * @payload:    * @flags:     * *  NLMSG_DEFAULT_SIZE,      */ static inline struct sk_buff *nlmsg_new(size_t payload, gfp_t flags) { return alloc_skb(nlmsg_total_size(payload), flags); } /** * nlmsg_put -    NetLink  skb  * @skb:     netlink  * @pid:   * @seq:    * @type:   * @payload:    ( ) * @flags:   * *  NULL,   skb    , *        netlink , *    netlink  */ static inline struct nlmsghdr *nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int payload, int flags) /** * nlmsg_unicast тАУ   netlink  * @sk: netlink  * @skb:    netlink  * @pid: netlink    */ static inline int nlmsg_unicast(struct sock *sk, struct sk_buff *skb, u32 pid) /** * nlmsg_data тАУ      * @nlh:  netlink  */ static inline void *nlmsg_data(const struct nlmsghdr *nlh) { return (unsigned char *) nlh + NLMSG_HDRLEN; } 

рдпрд╣ рдореЙрдбреНрдпреВрд▓ Shifter рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдкрд░ рдкреИрдХреЗрдЯ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреЗрдЯрд╡реЗ рдкрд░ iptables рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдЬреЛрдбрд╝рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
 #   nat   (-A)   PREROUTING #   tcp    443    443  iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 443 

рд╢рд┐рдлреНрдЯрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдЕрдВрддред


рдкреНрд░рдпреБрдХреНрдд рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕рд╛рд╣рд┐рддреНрдп


NetFilter.org
рд▓рд┐рдирдХреНрд╕, рдХрд░реНрдиреЗрд▓, рдлрд╝рд╛рдпрд░рд╡реЙрд▓
рдХрд░реНрдиреЗрд▓ рдХреЛрд░реНрдирд░ - рдиреЗрдЯрд▓рд┐рдВрдХ рд╕реЙрдХреЗрдЯ
рдЖрд░рдПрдлрд╕реА 3549 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ рдХрд░реЗрдВ - рд▓рд┐рдирдХреНрд╕ рдиреЗрдЯрд▓рд┐рдВрдХ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдиреЗрдЯрд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЖрдИрдкреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ
ред рднрд╛рдЧ 1
рд▓рд┐рдирдХреНрд╕ рдиреЗрдЯрд▓рд┐рдВрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓

Source: https://habr.com/ru/post/In138328/


All Articles