рдпрд╣ рд▓реЗрдЦ рдЙрди рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рд╣реИ рдЬреЛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ HTTPS рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рдкрд╛рд░рджрд░реНрд╢реА рд╕рдореАрдкрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рдЫреЛрдЯреА рддрд╛рд▓рд┐рдХрд╛ рддрд╛рдХрд┐ рдЖрдк рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдЧреЗ рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реИ:
- рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рдиред
- рдХреНрд▓рд╛рдЗрдВрдЯ - рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рдиред
- рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдирд╛ред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди (рдиреЗрдЯрд▓рд┐рдВрдХ) рд╕реЗ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛
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>" #define KERN_ALERT "<1>" #define KERN_CRIT "<2>" #define KERN_ERR "<3>" #define KERN_WARNING "<4>" #define KERN_NOTICE "<5>" #define KERN_INFO "<6>" #define KERN_DEBUG "<7>" #define KERN_DEFAULT "<d>"
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрдВрдХрд╛рд▓ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ:
#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 рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд╕рдВрдХрд▓рд┐рдд рдореЙрдбреНрдпреВрд▓ рдареАрдХ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВ, рдФрд░ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдореЗрдХрдлрд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВред рдЖрдЗрдП рджреЛ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдПрдВ:
рд╕рднреА (рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг) рдФрд░
рд╕реНрд╡рдЪреНрдЫ (рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдлрд╛рдИ), рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
рдХрд░реНрдиреЗрд▓-рд╣реЗрдбрд░ рд╕реЗ
рдореЗрдХрдлрд╛рдЗрд▓ рдореЗрдВ
рдореЙрдбреНрдпреВрд▓ рдФрд░
рд╕рд╛рдл ред
рдЕрдм рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ
рдореЗрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
рдореЗрдХ рдХреНрд▓реАрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдХреЛ рд╕рд╛рдл рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рддреИрдпрд╛рд░ рдореЙрдбреНрдпреВрд▓
рдореЙрдбреНрдпреВрд▓_рдЯреЗрд╕реНрдЯ.рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ , рдЬрд┐рд╕реЗ рддреБрд░рдВрдд
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 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- NF_INET_PRE_ROUTING - рдлрд╝рдВрдХреНрд╢рди рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдЗрдирдкреБрдЯ рдкреИрдХреЗрдЯ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдкреИрдХреЗрдЯ рдкрд╣рд▓реЗ рд╣реА рд╕рд░рд▓ рдЪреЗрдХ рдкрд╛рд╕ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ (рдкреИрдХреЗрдЯ рдЦреЛ рдирд╣реАрдВ рдЧрдП рд╣реИрдВ, рдЖрдИрдкреА рдЪреЗрдХрд╕рдо рдареАрдХ рд╣реИ, рдЖрджрд┐);
рдкреИрдХреЗрдЯ рддрдм рд░реВрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЯ рдХрд┐рд╕реА рдЕрдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ рдпрд╛ рдирд╣реАрдВред рд░реВрдЯрд┐рдВрдЧ рдПрдХ рдкреИрдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдпрд╣ рдирд┐рдпрдорд┐рдд рдирд╣реАрдВ рд╣реИред - NF_INET_LOCAL_IN - рдЕрдЧрд░ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рддреЛ рдкреИрдХреЗрдЬ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ;
- NF_INET_FORWARD - рдЬрдм рдПрдХ рдкреИрдХреЗрдЯ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд░реВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- NF_INET_LOCAL_OUT - рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд▓;
- 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 #define NF_ACCEPT 1 #define NF_STOLEN 2 #define NF_QUEUE 3 #define NF_REPEAT 4 #define NF_STOP 5
рдореЗрд░реЗ рдирд┐: рд╢реБрд▓реНрдХ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд▓рдЧреЗрдЧрд╛:
- NF_DROP - рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ
- NF_ACCEPT - рдкреИрдХреЗрдЯ рдЖрдЧреЗ рдЬрд╛рддрд╛ рд╣реИ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИрдВ
- NF_STOLEN - рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдбреНрд░реЙрдк рдХрд░реЗрдВ (рдХрд░реНрдиреЗрд▓ рдЕрдм рдЗрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдореБрдлреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛)
- NF_QUEUE - рдПрдХ рдкреИрдХреЗрдЯ рдХрддрд╛рд░ (рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЯ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП)
- NF_REPEAT - рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рджреЛрд╣рд░рд╛рдПрдВ (рдЙрд╕реА рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ)
- NF_STOP - рдкреИрдХреЗрдЯ рдХреЛ рдЖрдЧреЗ рдЫреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЬрд╛рд░реА рди рд░рдЦреЗрдВ
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рдкреИрдХреЗрдЬ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рдкрд░, рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рд╣рдордиреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдЕрдм рд╣рдо рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЖрдЗрдП рдЗрд╕реЗ
рд╣реБрдХ_рдлрдВрдХ рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреИрдХреЗрдЯреЛрдВ рдХреЛ рджреЗрдЦреЗрдЧрд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ
рдЕрдирд░рдЬрд┐рд╕реНрдЯрд░реНрдб рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдХрд░реНрдиреЗрд▓ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
#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 *) ) { return NF_DROP; }
рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- uint рд╣реБрдХреБрдо рдореЗрдВ рдирд┐рдореНрди рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: {NF_INET_PRE_ROUTING = 0, NF_INET_LOCAL_IN = 1, NF_INET_FORWARD = 2, NF_INET_LOCAL_OUT = 3, NF_INET_POST_ROUTING = 4} ред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛рдБ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╕рдВрд░рдЪрдирд╛ sk_buff * рдкреИрдХреЗрдЬ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП skb рд╕реВрдЪрдХред
- рдЗрдирдкреБрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ const рд╕рдВрд░рдЪрдирд╛ net_device * ред рдпрджрд┐ рдпрд╣ рдПрдХ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдкреИрдХреЗрдЯ рд╣реИ, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ NULL рд╣реИред
- const рд╕рдВрд░рдЪрдирд╛ net_device * рдЖрдЙрдЯрдкреБрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред рдпрджрд┐ рдпрд╣ рдПрдХ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдкреИрдХреЗрдЯ рд╣реИ, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ NULL рд╣реИред
- int (* okfn) (рд╕реНрдЯреНрд░рдХреНрдЪрд░ sk_buff *) рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЙрддреНрддрд░ рджреЗрддреА рд╣реИрдВред
рдЕрдм рдкреИрдХреЗрдЬ
рд╕реНрдЯреНрд░рдХреНрдЪрд░ 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 рдПрдордмреА рдореЗрдореЛрд░реА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛, рдФрд░ рдпрд╣ рдХреБрдЫ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЯрдХреНрдХрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ :) рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рднреБрдЧрддрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рдбреЗрд▓рдЯреЗрдмрд▓ рдЖрдо рддреМрд░ рдкрд░ рдЦрд╛рд▓реА рд╣реЛрддрд╛ рд╣реИред
#define MaxTable 0x1FFFFF uint Table[MaxTable]; uint KeyHash(uint src_IP, ushort src_Port) { return (uint)(((src_IP & 0xFF000000) >> 11) ^ (uint)src_Port) % MaxTable; } 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) { } 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; unsigned short nl_pad; __u32 nl_pid; __u32 nl_groups; };
рд╕рдВрд░рдЪрдирд╛ nlmsghdr рдиреЗрдЯрд▓рд┐рдВрдХ рд╕рдВрджреЗрд╢ рд╣реИрдбрд░ рд╣реИ рдФрд░ рднреЗрдЬрд╛ / рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NLMSG_DATA (рд╕реНрдЯреНрд░рдХреНрдЪрд░ nlmsghdr *) рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред struct nlmsghdr { __u32 nlmsg_len; __u16 nlmsg_type; __u16 nlmsg_flags; __u32 nlmsg_seq; __u32 nlmsg_pid; };
iovec рдПрдХ struct - рдореЗрдВ рд╣реИ msghdr , рдпрд╣ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ nlmsghdr ред struct iovec { void * iov_base; 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> рд╕реЗ рднреА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА , рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдЕрджреНрднреБрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВредрдореИрдВ рдмрд╕ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реВрдВрдЧрд╛: static inline struct sk_buff *nlmsg_new(size_t payload, gfp_t flags) { return alloc_skb(nlmsg_total_size(payload), flags); } static inline struct nlmsghdr *nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int payload, int flags) static inline int nlmsg_unicast(struct sock *sk, struct sk_buff *skb, u32 pid) static inline void *nlmsg_data(const struct nlmsghdr *nlh) { return (unsigned char *) nlh + NLMSG_HDRLEN; }
рдпрд╣ рдореЙрдбреНрдпреВрд▓ Shifter рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИредрдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдкрд░ рдкреИрдХреЗрдЯ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреЗрдЯрд╡реЗ рдкрд░ iptables рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдЬреЛрдбрд╝рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
рд╢рд┐рдлреНрдЯрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВрдЕрдВрддред
рдкреНрд░рдпреБрдХреНрдд рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕рд╛рд╣рд┐рддреНрдп
NetFilter.orgрд▓рд┐рдирдХреНрд╕, рдХрд░реНрдиреЗрд▓, рдлрд╝рд╛рдпрд░рд╡реЙрд▓рдХрд░реНрдиреЗрд▓ рдХреЛрд░реНрдирд░ - рдиреЗрдЯрд▓рд┐рдВрдХ рд╕реЙрдХреЗрдЯрдЖрд░рдПрдлрд╕реА 3549 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ рдХрд░реЗрдВ - рд▓рд┐рдирдХреНрд╕ рдиреЗрдЯрд▓рд┐рдВрдХ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдиреЗрдЯрд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЖрдИрдкреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВред рднрд╛рдЧ 1рд▓рд┐рдирдХреНрд╕ рдиреЗрдЯрд▓рд┐рдВрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓