| socat(1) | socat(1) |
نام (NAME)
socat - رله چندمنظوره (SOcket CAT)
خلاصه دستور (SYNOPSIS)
socat [options] <address>
<address>
socat -V
socat -h[h[h]] | -?[?[?]]
filan
procan
توضیحات (DESCRIPTION)
ابزار Socat برنامهای مبتنی بر خط فرمان است که دو جریان بایت (byte stream) دوطرفه برقرار کرده و دادهها را میان آنها منتقل میکند. از آنجا که این جریانها را میتوان از مجموعه گستردهای از انواع مختلف مبدأها و مقصدهای داده (رجوع به انواع نشانیها) ایجاد کرد، و به دلیل اینکه میتوان گزینههای نشانی فراوانی را بر روی این جریانها اعمال نمود، socat برای اهداف بسیار گوناگونی قابل استفاده است.
ابزار Filan برنامهای است که اطلاعات مربوط به توصیفگرهای فایل فعال خود را در خروجی استاندارد (stdout) چاپ میکند. این ابزار برای اشکالزدایی socat نوشته شده است، اما برای مقاصد دیگر نیز ممکن است مفید باشد. برای یافتن اطلاعات بیشتر از گزینه -h استفاده کنید.
ابزار Procan برنامهای است که اطلاعات مربوط به پارامترهای پردازش را در خروجی استاندارد چاپ میکند. این ابزار به منظور درک بهتر برخی از ویژگیهای پردازشهای UNIX و اشکالزدایی socat نوشته شده است، اما ممکن است برای اهداف دیگر نیز مفید واقع شود.
چرخه حیات یک نمونه از socat معمولاً از چهار فاز تشکیل میشود.
در فاز init (راهاندازی)، گزینههای خط فرمان پردازش شده و ثبت گزارشها (logging) مقداردهی اولیه میشود.
در طول فاز open (باز کردن)، socat ابتدا نشانی نخست و سپس نشانی دوم را باز میکند. این مراحل معمولاً مسدودکننده (blocking) هستند؛ از این رو، بهویژه برای انواع نشانیهای پیچیده نظیر socks، درخواستهای اتصال یا گفتگوهای احراز هویت باید پیش از آغاز مرحله بعد تکمیل شوند.
در فاز transfer (انتقال)، socat توصیفگرهای فایل خواندن و نوشتن هر دو جریان را از طریق select() زیر نظر میگیرد؛ هنگامی که داده در یک سمت آماده باشد و بتوان آن را در سمت دیگر نوشت، socat آن را میخواند، در صورت لزوم تبدیلهای نویسه خط جدید (newline) را انجام میدهد، داده را در توصیفگر فایل نوشتن جریان دیگر مینویسد، و سپس به انتظار برای دادههای بیشتر در هر دو جهت ادامه میدهد.
هنگامی که یکی از جریانها در عمل به EOF برسد، فاز closing (بستن) آغاز میشود. Socat وضعیت EOF را به جریان دیگر منتقل میکند، یعنی تلاش میکند تنها جریان نوشتن آن را متوقف (shutdown) کند تا به آن فرصتی برای خاتمه تمیز (graceful) داده شود. برای مدتی مشخص، socat به انتقال داده در جهت دیگر ادامه میدهد، اما پس از آن تمام کانالهای باقیمانده را بسته و خاتمه مییابد.
گزینهها (OPTIONS)
برنامه Socat گزینههایی در خط فرمان فراهم میکند که رفتار برنامه را تغییر میدهند. این گزینهها ارتباطی با گزینههای نشانی (address options) ندارند که به عنوان بخشی از مشخصات نشانی به کار میروند.
- -V
- اطلاعات نسخه و قابلیتهای دردسترس را در stdout چاپ کرده و خارج میشود.
- -h | -?
- متن راهنمایی را شامل توضیح گزینههای خط فرمان و انواع نشانیهای دردسترس در stdout چاپ کرده و خارج میشود.
- -hh | -??
- مشابه -h، به همراه فهرستی از نامهای کوتاه تمام گزینههای نشانی دردسترس. برخی گزینهها وابسته به پلتفرم هستند، بنابراین این خروجی برای بررسی پیادهسازی مربوطه مفید است.
- -hhh | -???
- مشابه -hh، به همراه فهرستی از تمامی نامهای گزینههای نشانی دردسترس.
- -d
- بدون این گزینه، تنها پیامهای مهلک (fatal)، خطای (error) و هشدار (warning) چاپ میشوند؛ با اعمال این گزینه، پیامهای توجه (notice) نیز چاپ خواهند شد. برای اطلاعات بیشتر به بخش خطاها (DIAGNOSTICS) مراجعه کنید.
- -d0
- با این گزینه، تنها پیامهای مهلک و خطا چاپ میشوند؛ این گزینه رفتار socat را تا نسخه 1.7.4 بازمیگرداند.
- -d -d | -dd | -d2
- پیامهای مهلک، خطا، هشدار و توجه را چاپ میکند.
- -d -d -d | -ddd | -d3
- پیامهای مهلک، خطا، هشدار، توجه و اطلاعرسانی (info) را چاپ میکند.
- -d -d -d -d | -dddd | -d4
- پیامهای مهلک، خطا، هشدار، توجه، اطلاعرسانی و اشکالزدایی (debug) را چاپ میکند.
- -D
- پیش از آغاز فاز انتقال، اطلاعات مربوط به توصیفگرهای فایل را ثبت میکند.
- --experimental
- قابلیتهای جدیدی که به خوبی آزمایش نشدهاند یا در آینده دستخوش تغییر میشوند، باید صراحتاً با این گزینه فعال گردند.
- -ly[<facility>]
- پیامها را بهجای stderr به syslog میفرستد؛ سطح حساسیت آن با گزینه -d تعیین میشود. با مقدار اختیاری <facility>، نوع syslog قابل انتخاب است که بهطور پیشفرض "daemon" میباشد. کتابخانههای شخص ثالث ممکن است از این گزینه تبعیت نکنند.
- -lf <logfile>
- پیامها را بهجای stderr در <logfile> [نام فایل] مینویسد. برخی کتابخانههای شخص ثالث، بهویژه libwrap، ممکن است از این گزینه تبعیت نکنند.
- -ls
- پیامها را در stderr مینویسد (این حالت پیشفرض است). برخی کتابخانههای شخص ثالث ممکن است از این گزینه تبعیت نکنند، بهویژه به نظر میرسد libwrap تنها در syslog ثبت میکند.
- -lp<progname>
- نام برنامهای را که در پیامهای خطا چاپ میشود و برای ساخت نامهای متغیرهای محیطی به کار میرود، تغییر میدهد.
- -lu
- دقت برچسب زمان (timestamp) پیامهای خطا را به میکروثانیه افزایش میدهد. هنگام ارسال به syslog کار نمیکند.
- -lm[<facility>]
- حالت گزارشگیری ترکیبی. هنگام راهاندازی پیامها در stderr چاپ میشوند؛ هنگامی که socat حلقه فاز انتقال یا حالت دیمن را آغاز میکند (یعنی پس از باز کردن همه جریانها و پیش از آغاز انتقال داده، یا با سوکتهای شنونده به همراه گزینه fork، پیش از نخستین فراخوانی accept)، گزارشگیری را به syslog تغییر میدهد. با مشخص کردن <facility> اختیاری، نوع syslog را میتوان تعیین کرد که بهطور پیشفرض "daemon" است.
- -lh
- نام میزبان (hostname) را به پیامهای گزارش اضافه میکند. از مقدار متغیر محیطی HOSTNAME یا در صورت تنظیم نبودن آن، از مقدار دریافتشده از uname() استفاده میکند.
- -v
- دادههای منتقلشده را نهتنها به جریانهای مقصد آنها، بلکه در stderr نیز مینویسد. قالب خروجی بهصورت متن با اعمال برخی تبدیلها برای خوانایی بهتر است و پیشوند "> " یا "< " جهت جریان داده را مشخص میکند.
- -x
- دادههای منتقلشده را نهتنها به جریانهای مقصد، بلکه در stderr نیز مینویسد. قالب خروجی بهصورت هگزادسیمال همراه با پیشوند "> " یا "< " برای نمایش جهت جریان است. میتواند با -v ترکیب شود.
- -r <file>
- دادههای خام (باینری) منتقلشده از نشانی سمت چپ به سمت راست را در فایل مشخصشده تخلیه (dump) میکند. نام فایل میتواند شامل ارجاعاتی به متغیرهای محیطی و $$ (شناسه فرآیند یا pid)، $PROGNAME (گزینه -lp را ببینید)، $TIMESTAMP (با قالب %Y%m%dT%H%M%S)، و MICROS (میکروثانیههای زمان جاری) باشد. بدیهی است که این ارجاعات باید در برابر گسترش توسط شل محافظت شوند.
- -R <file>
- دادههای خام (باینری) منتقلشده از نشانی سمت راست به سمت چپ را در فایل مشخصشده تخلیه میکند. برای سفارشیسازی نام فایل به گزینه -r مراجعه کنید.
- -b<size>
- اندازه بلوک انتقال داده <size> [size_t] را تعیین میکند. در هر مرحله حداکثر <size> بایت منتقل میشود. مقدار پیشفرض 8192 بایت است.
- -s
- بهطور پیشفرض، هنگامی که خطایی رخ میدهد، socat خاتمه مییابد تا از اجرای برنامه در زمانی که برخی گزینهها قابل اعمال نبودهاند، جلوگیری شود. با این گزینه، socat در مواجهه با خطاها آسانگیرانه عمل کرده و تلاش میکند به کار خود ادامه دهد. حتی با وجود این گزینه، socat در مواجهه با خطاهای مهلک خارج خواهد شد و در صورت شکست بررسیهای امنیتی، تلاشهای اتصال را لغو میکند.
- -S<signals-bitmap>
- مجموعه
سیگنالهایی
را تغییر
میدهد که
توسط socat
صرفاً جهت
ثبت یک پیام
گزارش
دریافت
میشوند. به
دام
انداختن
این
سیگنالها
برای درج
اطلاعات
مربوط به
سیگنال در
گزارشهای
socat مفید
است، اما از
تولید core dump یا
سایر
کنشهای
پیشفرض
جلوگیری
میکند.
مجموعه
پیشفرض
این
سیگنالها
عبارت است
از SIGHUP، SIGINT، SIGQUIT،
SIGILL، SIGABRT، SIGBUS، SIGFPE، SIGSEGV
و SIGTERM؛ این
مجموعه (0x89de در
لینوکس) را
با یک نگاشت
بیتی
جایگزین
کنید (برای
نمونه، SIGFPE
دارای
مقدار 8 و
بیت آن 0x0080
است).
نکته: سیگنالهای SIGHUP، SIGINT، SIGQUIT، SIGUSR1، SIGPIPE، SIGALRM، SIGTERM و SIGCHLD ممکن است در هر حالتی بهطور ویژه مدیریت شوند. - -t<timeout>
- هنگامی که
یک کانال به
EOF برسد (که از
طریق گزینه
ignoreeof نادیده
گرفته نشده
باشد)، بخش
نوشتن
کانال دیگر
متوقف (shutdown)
میشود.
سپس، socat پیش
از خاتمه
یافتن، به
مدت <timeout>
ثانیه [timeval]
منتظر
میماند.
چنانچه در
طول بازه
مهلت زمانی
بخش خواندن
کانال دیگر
نیز به EOF
برسد، socat
بدون
انتظار
برای پایان
مهلت،
خاتمه
مییابد.
پیشفرض 0.5
ثانیه است،
مقدار 0 نیز
معتبر است.
این مهلت
زمانی فقط
برای
نشانیهایی
کاربرد
دارد که
بخشهای
خواندن و
نوشتن
آنها را
بتوان
بهطور
جداگانه
بست یا
متوقف کرد..IP
"-T<timeout>"
مهلت
زمانی کل
عدم فعالیت:
هنگامی که
socat
هماکنون
در حلقهٔ
انتقال
قرار دارد و
برای مدت <timeout>
[timeval] ثانیه
هیچ اتفاقی
رخ نداده
باشد
(دادهای
نرسیده
باشد، هیچ
وقفهای رخ
نداده
باشد...) به
کار خود
پایان
میدهد. تا
نسخهٔ 1.8.0.0
مقدار "0" به
معنای
"نامحدود"
بود؛ از
نسخهٔ 1.8.0.1 به
بعد "0" به
معنای 0 است
و مقادیر 0>
به معنای
نامحدود
هستند،
پیشفرض -1
است.
برای پروتکلهایی مانند UDP که قادر به انتقال EOF نیستند کاربردی است. - -u
- از حالت یکطرفه استفاده میکند. آدرس اول فقط برای خواندن و آدرس دوم فقط برای نوشتن استفاده میشود (مثال).
- -U
- از حالت یکطرفه در جهت معکوس استفاده میکند. آدرس اول فقط برای نوشتن و آدرس دوم فقط برای خواندن استفاده میشود.
- -g
- هنگام تجزیهٔ گزینههای آدرس، بررسی نمیکند که آیا گزینه در محیط آدرس مشخصشده مفید تلقی میشود یا خیر. در صورتی از آن استفاده کنید که بخواهید، به عنوان مثال، اِعمال یک گزینهٔ socket بر روی یک دستگاه سریالی را تحمیل کنید.
- -L<lockfile>
- اگر lockfile وجود داشته باشد، با خطا خارج میشود. اگر lockfile وجود نداشته باشد، آن را ایجاد کرده و ادامه میدهد، و هنگام خروج lockfile را حذف (unlink) میکند.
- -W<lockfile>
- اگر lockfile وجود داشته باشد، تا زمان ناپدید شدن آن منتظر میماند. وقتی lockfile وجود نداشته باشد، آن را ایجاد کرده و ادامه میدهد، و هنگام خروج lockfile را حذف (unlink) میکند.
- -4
- در صورتی که آدرسها بهطور ضمنی یا صریح نسخهای را تعیین نکنند، از IP نسخهٔ 4 استفاده میکند. از نسخهٔ 1.8.0.1 به بعد این حالت پیشفرض است.
- -6
- در صورتی که آدرسها بهطور ضمنی یا صریح نسخهای را تعیین نکنند، از IP نسخهٔ 6 استفاده میکند.
- -0
- نسخهٔ خاصی از IP را ترجیح نمیدهد؛ این امکان را به آدرسهای غیرفعال (LISTEN، RECV، ..) میدهد تا در برخی پلتفرمها (بهجز BSD) به هر دو نسخه سرویسدهی کنند.
- --statistics
- -S
- پیش از
پایان دادن
به socat، آمار
انتقال
(شمارندههای
بایتها و
بلوکها
برای هر دو
جهت) را ثبت
میکند.
همچنین سیگنال USR1 را ببینید.
مشخصات آدرس (ADDRESS SPECIFICATIONS)
کاربر با آرگومانهای خط فرمان آدرس، دستورالعملها و اطلاعات لازم برای برقراری جریانهای بایت را به socat میدهد.
مشخصات یک آدرس معمولاً شامل یک کلیدواژهٔ نوع آدرس، صفر یا چند پارامتر آدرس الزامی که با ’:’ از کلیدواژه و از یکدیگر جدا شدهاند، و صفر یا چند گزینهٔ آدرس که با ’,’ از یکدیگر جدا شدهاند میباشد.
کلیدواژه، نوع آدرس را مشخص میکند (به عنوان مثال TCP4، OPEN، EXEC). برای برخی کلیدواژهها مترادفهایی وجود دارد (’-’ برای STDIO، TCP برای TCP4). کلیدواژهها به حروف کوچک و بزرگ حساس نیستند. برای چند نوع آدرس خاص، کلیدواژه میتواند حذف شود: مشخصات آدرسی که با یک عدد شروع میشوند، آدرسهای FD (توصیفگر فایل خام) فرض میشوند؛ اگر پیش از نخستین ’:’ یا ’,’ نویسهٔ ’/’ یافت شود، GOPEN (باز کردن عمومی فایل) در نظر گرفته میشود.
تعداد و نوع پارامترهای آدرس الزامی به نوع آدرس بستگی دارد. برای مثال، TCP4 نیازمند مشخصات سرور (نام یا آدرس)، و مشخصات پورت (شماره یا نام سرویس) است.
همراه با هر آدرس میتوان صفر یا چند گزینهٔ آدرس را تعیین کرد. آنها به روشهایی بر آدرس تأثیر میگذارند. گزینهها شامل یک کلیدواژهٔ گزینه یا یک کلیدواژهٔ گزینه و یک مقدار هستند که با ’=’ از یکدیگر جدا شدهاند. کلیدواژههای گزینهها به حروف کوچک و بزرگ حساس نیستند. برای فیلتر کردن گزینههایی که برای یک نوع آدرس مفید هستند، هر گزینه عضو یک گروه گزینه است. برای هر نوع آدرس مجموعهای از گروههای گزینهٔ مجاز وجود دارد. تنها گزینههای متعلق به یکی از این گروههای آدرس میتوانند استفاده شوند (به جز هنگام استفاده از گزینهٔ -g).
مشخصات آدرسی که از ساختار بالا پیروی میکنند، مشخصات آدرس single (تک) نیز نامیده میشوند. دو آدرس تک را میتوان با "!!" ترکیب کرد تا یک آدرس از نوع dual (دوگانه) برای یک کانال تشکیل شود. در اینجا، آدرس اول توسط socat برای خواندن دادهها و آدرس دوم برای نوشتن دادهها استفاده میشود. هیچ راهی برای تعیین یک گزینه تنها یکبار به طوری که روی هر دو آدرس تک اعمال شود وجود ندارد.
معمولاً آدرسها در حالت خواندن/نوشتن باز میشوند. هنگامی که یک آدرس بخشی از یک مشخصات آدرس دوگانه باشد، یا هنگامی که گزینهٔ -u یا -U استفاده شود، ممکن است یک آدرس فقط برای خواندن یا فقط برای نوشتن به کار رود. در نظر گرفتن این موضوع در برخی از انواع آدرس مهم است.
از نسخهٔ 1.5.0 و بالاتر socat، تحلیل واژگانی تلاش میکند نقلقولها و پرانتزها را به صورت معنادار مدیریت کند و امکان گریز دادن (escape) نویسههای خاص را فراهم میسازد. اگر یکی از نویسههای ( { [ ’ یافت شود، نویسهٔ پایانی متناظر - ) } ] ’ - جستجو میشود؛ آنها همچنین میتوانند به صورت تو در تو باشند. در داخل این ساختارها، نویسهها و رشتههای خاص socat مانند : , !! به صورت ویژه پردازش نمیشوند. تمام این نویسهها و رشتهها را میتوان با \ یا درون "" گریز داد.
این بخش انواع آدرسهای موجود را به همراه کلمات کلیدی، پارامترها و معناشناسی آنها توصیف میکند.
- CREATE:<filename>
- فایل <filename> را
با creat() باز
کرده و از
توصیفگر
فایل برای
نوشتن
استفاده
میکند. این
یک آدرس
فقطنوشتنی
است زیرا
فایلی که با
creat باز
شده باشد را
نمیتوان
خواند.
گزینههای
-u و -U، و
آدرسهای
دوگانه را
ببینید.
پرچمهایی مانند O_LARGEFILE را نمیتوان اعمال کرد. اگر به آنها نیاز دارید از OPEN همراه با گزینههای create,create استفاده کنید.
مقدار <filename> باید یک مسیر معتبر، موجود یا ناموجود باشد. اگر <filename> یک لوله نامگذاریشده (named pipe) باشد، creat() ممکن است مسدود (block) شود؛ اگر <filename> به یک سوکت اشاره کند، این یک خطا است.
گروههای گزینه: FD,REG,NAMED
گزینههای مفید: mode, mode, user, group, unlink-early, unlink-late, append
همچنین ببینید: OPEN, GOPEN - DCCP-CONNECT:<host>:<port> (DCCP:<host>:<port>)
- یک اتصال DCCP
به <host> [آدرس IP]
و <port> [سرویس DCCP]
مشخصشده
بسته به
مشخصات
آدرس،
تفکیک نام
یا گزینه pf
با استفاده
از نگارش ۴
یا ۶ پروتکل
IP برقرار
میکند.
گروههای گزینه: FD,SOCKET,IP4,IP6,SCTP,CHILD,RETRY
گزینههای مفید: bind, connect-timeout, tos, dccp-set-ccid, nonblock, sourceport, retry, readbytes
همچنین ببینید: DCCP4-CONNECT, DCCP6-CONNECT, DCCP-LISTEN, TCP-CONNECT SCTP-CONNECT - DCCP4-CONNECT:<host>:<port> (DCCP4:<host>:<port>)
- مشابه DCCP-CONNECT،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP4,DCCP,CHILD,RETRY
- DCCP6-CONNECT:<host>:<port> (DCCP6:<host>:<port>)
- مشابه DCCP-CONNECT،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP6,DCCP,CHILD,RETRY - DCCP-LISTEN:<port> (DCCP-L:<port>)
- روی <port>
[سرویس DCCP] گوش
فراداده و
یک اتصال DCCP
را
میپذیرد.
نگارش IP
برابر با ۴
یا نگارش
مشخصشده
با گزینه
آدرس pf،
گزینه socat (-4, -6)،
یا متغیر
محیطی SOCAT_DEFAULT_LISTEN_IP
است. توجه
داشته
باشید که
باز کردن
این آدرس
معمولاً تا
زمان اتصال
یک کلاینت
مسدود
میشود.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP4,IP6,DCCP,RETRY
گزینههای مفید: fork, bind, range, max-children, backlog, accept-timeout, dccp-set-sid, su, reuseaddr, retry
همچنین ببینید: DCCP4-LISTEN, DCCP6-LISTEN, TCP-LISTEN, SCTP-LISTEN, DCCP-CONNECT - DCCP4-LISTEN:<port> (DCCP4-L:<port>)
- مشابه DCCP-LISTEN،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP4,DCCP,RETRY
- DCCP6-LISTEN:<port> (DCCP6-L:<port>)
- مشابه DCCP-LISTEN،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP6,DCCP,RETRY - EXEC:<command-line>
- یک
زیرفرآیند
را fork میکند
که ارتباط
با فرآیند
والد خود را
برقرار
ساخته و
برنامه
مشخصشده
را با execvp()
فراخوانی
مینماید.
دستور <command-line>
یک دستور
ساده است که
آرگومانهای
آن با
تکفاصلهها
جدا
شدهاند.
اگر نام
برنامه
شامل ’/’
باشد، بخش
پس از آخرین
’/’ به
عنوان ARGV[0] در
نظر گرفته
میشود. اگر
نام برنامه
یک مسیر
نسبی باشد،
معناشناسی
execvp() برای
یافتن
برنامه از
طریق $PATH
اعمال
میگردد. پس
از شروع
موفقیتآمیز
برنامه، socat
دادهها را
به stdin فرآیند
نوشته و با
استفاده از
یک سوکت
دامنه
یونیکس که
به طور
پیشفرض
توسط socketpair()
ایجاد شده
است، از stdout آن
میخواند.
(مثال)
گروههای گزینه: FD,SOCKET,EXEC,FORK,TERMIOS
گزینههای مفید: path, fdin, fdout, chroot, su, su-d, nofork, socktype, pty, stderr, ctty, setsid, pipes, umask, login, sigint, sigquit, netns
همچنین ببینید: SYSTEM,SHELL - FD:<fdnum>
- از
توصیفگر
فایل <fdnum>
استفاده
میکند. این
توصیفگر
باید از قبل
به عنوان یک
توصیفگر
فایل معتبر
در UN*X وجود
داشته باشد.
گروههای گزینه: FD (TERMIOS,REG,SOCKET)
همچنین ببینید: STDIO, STDIN, STDOUT, STDERR - GOPEN:<filename>
- (Generic open یا باز
کردن عمومی)
این نوع
آدرس تلاش
میکند با
هر ورودی در
فایلسیستم،
به جز
دایرکتوریها،
به شکلی
کاربردی
رفتار کند.
<filename> ممکن است
یک مسیر
نسبی یا
مطلق باشد.
اگر از قبل
وجود داشته
باشد، نوع
آن بررسی
میشود. در
صورت سوکت
دامنه
یونیکس
بودن، socat
متصل
میشود؛
اگر اتصال
ناموفق
باشد، socat آن
را یک سوکت
دیتاگرام
در نظر
گرفته و از
فراخوانیهای
sendto()
استفاده
میکند. اگر
ورودی سوکت
نباشد، socat
آن را با
اعمال پرچم
O_APPEND باز
میکند. اگر
وجود
نداشته
باشد، با
پرچم O_CREAT
به عنوان یک
فایل
معمولی باز
میشود
(مثال).
گروههای گزینه: FD,REG,SOCKET,NAMED,OPEN
همچنین ببینید: OPEN, CREATE, UNIX-CONNECT.IP - IP-SENDTO:<host>:<protocol>
- یک سوکت خام
IP باز
میکند.
بسته به
مشخصه
میزبان یا
گزینه pf،
پروتکل IP
نسخه ۴ یا ۶
استفاده
میشود. از
<protocol> برای
ارسال
بستهها به
<host> [نشانی IP]
استفاده
کرده و
بستهها را
از host دریافت
میکند، و
بستههای
ارسالی از
سایر
میزبانها
را نادیده
میگیرد.
پروتکل ۲۵۵
از سوکت
خامی
استفاده
میکند که
در آن
سرآیند IP
بخشی از
داده است.
گروههای گزینه: FD,SOCKET,IP4,IP6
گزینههای مفید: pf, ttl
همچنین ببینید: IP4-SENDTO, IP6-SENDTO, IP-RECVFROM, IP-RECV, UDP-SENDTO, UNIX-SENDTO - INTERFACE:<interface>
- با استفاده
از
بستههای
خام شامل
دادههای
سطح پیوند،
با شبکهای
متصل روی یک
رابط
ارتباط
برقرار
میکند. <interface>
نام رابط
شبکه است.
در حال حاضر
فقط روی Linux در
دسترس است.
گروههای گزینه: FD,SOCKET
گزینههای مفید: pf, type
همچنین ببینید: ip-recv - IP4-SENDTO:<host>:<protocol>
- مانند IP-SENDTO،
اما همیشه
از IPv4
استفاده
میکند.
گروههای گزینه: FD,SOCKET,IP4
- IP6-SENDTO:<host>:<protocol>
- مانند IP-SENDTO،
اما همیشه
از IPv6
استفاده
میکند.
گروههای گزینه: FD,SOCKET,IP6 - IP-DATAGRAM:<address>:<protocol>
- دادههای
خروجی را به
نشانی
مشخصشده
ارسال
میکند که
بهویژه
میتواند
یک نشانی broadcast
یا multicast باشد.
بستههای
دریافتی
روی سوکت
محلی بررسی
میشوند تا
مشخص شود
آیا نشانی
مبدأ آنها
با
گزینههای
RANGE یا TCPWRAP
مطابقت
دارد یا
خیر. از این
نوع نشانی
برای نمونه
میتوان
برای
پیادهسازی
ارتباطات
متقارن یا
نامتقارن broadcast
یا multicast
استفاده
کرد.
گروههای گزینه: FD, SOCKET, IP4, IP6, RANGE
گزینههای مفید: bind, range, tcpwrap, broadcast, ip-multicast-loop, ip-multicast-ttl, ip-multicast-if, ip-add-membership, ip-add-source-membership, ipv6-join-group, ipv6-join-source-group, ttl, tos, pf
همچنین ببینید: IP4-DATAGRAM, IP6-DATAGRAM, IP-SENDTO, IP-RECVFROM, IP-RECV, UDP-DATAGRAM - IP4-DATAGRAM:<host>:<protocol>
- مانند IP-DATAGRAM،
اما همیشه
از IPv4
استفاده
میکند.
(مثال)
گروههای گزینه: FD,SOCKET,IP4,RANGE
- IP6-DATAGRAM:<host>:<protocol>
- مانند IP-DATAGRAM،
اما همیشه
از IPv6
استفاده
میکند.
لطفاً توجه
داشته
باشید که IPv6
از broadcast
پشتیبانی
نمیکند.
گروههای گزینه: FD,SOCKET,IP6,RANGE - IP-RECVFROM:<protocol>
- یک سوکت خام
IP برای <protocol>
باز میکند.
بسته به
گزینه pf،
پروتکل IP
نسخه ۴ یا ۶
استفاده
میشود. یک
بسته را از
یک همتای
نامشخص
دریافت
کرده و ممکن
است یک یا
چند بسته
پاسخ به آن
همتا ارسال
کند. این
حالت
بهویژه با
گزینه fork
مفید است که
در آن هر
بسته ورودی
- از
همتاهای
دلخواه -
توسط
زیرپروسه
اختصاصی
خود مدیریت
میشود. این
امر رفتاری
شبیه به
کارسازهای
مرسوم
مبتنی بر UDP
مانند ntpd یا named
را ممکن
میسازد.
لطفاً توجه داشته باشید در صورتی که نشانی IP فرستنده و گیرنده یکسان باشد، ممکن است بستههای پاسخ به عنوان ترافیک ورودی واکشی شوند زیرا هیچ شماره پورتی برای تمایز سوکتها وجود ندارد.
این نشانی به خوبی با همتاهای آدرس IP-SENDTO کار میکند (به بالا مراجعه کنید). پروتکل ۲۵۵ از سوکت خامی استفاده میکند که در آن سرآیند IP بخشی از داده است.
یادداشت مربوط به نشانیهای RECVFROM را ببینید.
گروههای گزینه: FD,SOCKET,IP4,IP6,CHILD,RANGE
گزینههای مفید: pf, fork, range, ttl, broadcast
همچنین ببینید: IP4-RECVFROM, IP6-RECVFROM, IP-SENDTO, IP-RECV, UDP-RECVFROM, UNIX-RECVFROM - IP4-RECVFROM:<protocol>
- مانند IP-RECVFROM،
اما همیشه
از IPv4
استفاده
میکند.
گروههای گزینه: FD,SOCKET,IP4,CHILD,RANGE
- IP6-RECVFROM:<protocol>
- مانند IP-RECVFROM،
اما همیشه
از IPv6
استفاده
میکند.
گروههای گزینه: FD,SOCKET,IP6,CHILD,RANGE - IP-RECV:<protocol>
- یک سوکت خام
IP برای <protocol>
باز میکند.
بسته به
گزینه pf،
پروتکل IP
نسخه ۴ یا ۶
استفاده
میشود.
بستهها را
از چندین
همتای
نامشخص
دریافت
کرده و
دادهها را
ادغام
میکند. هیچ
پاسخی
امکانپذیر
نیست، این
یک نشانی
فقطخواندنی
است؛ به
گزینههای
-u و -U، و
نشانیهای
دوگانه
مراجعه
کنید. این
نشانی
میتواند
برای مثال
توسط
همتاهای
نشانی IP-SENDTO در socat
مخاطب قرار
گیرد.
پروتکل ۲۵۵
از سوکت
خامی
استفاده
میکند که
در آن
سرآیند IP
بخشی از
داده است.
گروههای گزینه: FD,SOCKET,IP4,IP6,RANGE
گزینههای مفید: pf, range
همچنین ببینید: IP4-RECV, IP6-RECV, IP-SENDTO, IP-RECVFROM, UDP-RECV, UNIX-RECV - IP4-RECV:<protocol>
- مانند IP-RECV،
اما همیشه
از IPv4
استفاده
میکند.
گروههای گزینه: FD,SOCKET,IP4,RANGE
- IP6-RECV:<protocol>
- مانند IP-RECV،
اما همیشه
از IPv6
استفاده
میکند.
گروههای گزینه: FD,SOCKET,IP6,RANGE - OPEN:<filename>
- با استفاده
از فراخوان
سیستمی
open() فایل
<filename> را باز
میکند
(مثال). این
عملیات روی
سوکتهای
دامنه UNIX با
شکست مواجه
میشود.
نکته: این نوع نشانی بهندرت در حالت دوطرفه مفید واقع میشود.
گروههای گزینه: FD,REG,NAMED,OPEN
گزینههای مفید: creat, excl, noatime, nofollow, append, rdonly, wronly, lock, readbytes, ignoreeof
همچنین ببینید: CREATE, GOPEN, UNIX-CONNECT.IP - OPENSSL:<host>:<port>
- تلاش
میکند تا
یک اتصال SSL
به <port> [سرویس
TCP] روی <host>
[نشانی IP] با
استفاده از
TCP/IP نسخه ۴ یا ۶
بسته به
مشخصات
نشانی،
تفکیک نام،
یا گزینه pf
برقرار کند.
نکته: تا نسخه 1.7.2.4 گواهی کارساز تنها از نظر اعتبار در برابر مخزن گواهیهای سیستم یا cafile یا capath بررسی میشد، اما با نام کارساز یا نشانی IP آن تطبیق داده نمیشد. از نسخه 1.7.3.0 دستور socat گواهی طرف مقابل را برای تطابق با پارامتر <host> یا مقدار گزینه openssl-commonname بررسی میکند. دستور socat تلاش میکند آن را با commonName موضوع (subject) گواهی و نامهای DNS افزونه subjectAltName گواهی تطبیق دهد. از نویسههای عام (wildcard) در گواهی پشتیبانی میشود.
گروههای گزینه: FD,SOCKET,IP4,IP6,TCP,OPENSSL,RETRY
گزینههای کاربردی: min-proto-version, cipher, verify, commonname, cafile, capath, certificate, key, compress, bind, pf, connect-timeout, sourceport, retry
همچنین ببینید: OPENSSL-LISTEN, TCP - OPENSSL-LISTEN:<port>
- روی tcp <port>
[سرویس TCP] گوش
فرا میدهد.
نسخه IP
برابر ۴ یا
نسخه
مشخصشده
با pf است.
هنگامی که
یک اتصال
پذیرفته
شود، این
نشانی
مانند یک
کارساز SSL
رفتار
میکند.
نکته: احتمالاً مایل خواهید بود که از گزینه certificate همراه با این نشانی استفاده کنید.
نکته: گواهی کلاینت تنها از نظر اعتبار در برابر cafile یا capath بررسی میشود، اما با نام کلاینت یا نشانی IP آن تطبیق داده نمیشود!
گروههای گزینه: FD,SOCKET,IP4,IP6,TCP,LISTEN,OPENSSL,CHILD,RANGE,RETRY
گزینههای کاربردی: pf, min-proto-version, cipher, verify, commonname, cafile, capath, certificate, key, compress, fork, bind, range, tcpwrap, su, reuseaddr, retry
همچنین ببینید: OPENSSL, TCP-LISTEN - OPENSSL-DTLS-CLIENT:<host>:<port>
- تلاش
میکند تا
یک اتصال DTLS
به <port> [سرویس
UDP] روی <host>
[نشانی IP] با
استفاده از
UDP/IP نسخه ۴ یا ۶
بسته به
مشخصات
نشانی،
تفکیک نام،
یا گزینه pf
برقرار کند.
دستور Socat مقادیر subjectAltName یا commonName گواهی طرف مقابل را در برابر گزینه openssl-commonname نشانی یا نام میزبان بررسی میکند. از نویسههای عام (wildcard) در گواهی پشتیبانی میشود.
از گزینه -b دستور socat استفاده کنید تا دیتاگرامها به اندازه کافی کوچک شوند که به همراه سرریز (overhead) در شبکه جای بگیرند. از گزینه -T برای جلوگیری از معلق ماندن نامحدود در هنگام قطع بیسر و صدای طرف مقابل استفاده کنید.
گروههای گزینه: FD,SOCKET,IP4,IP6,OPENSSL,RETRY
گزینههای کاربردی: min-proto-version, cipher, verify, commonname, cafile, capath, certificate, key, compress, bind, pf, sourceport, retry, rcvtimeo
همچنین ببینید: OPENSSL-DTLS-SERVER, OPENSSL-CONNECT, UDP-CONNECT - OPENSSL-DTLS-SERVER:<port>
- روی UDP <port>
[سرویس UDP] گوش
فرا میدهد.
نسخه IP
برابر ۴ یا
نسخه
مشخصشده
با pf است.
هنگامی که
یک اتصال
پذیرفته
شود، این
نشانی
مانند یک
کارساز DTLS
رفتار
میکند.
نکته: احتمالاً مایل خواهید بود که از گزینه certificate همراه با این نشانی استفاده کنید.
نکته: گواهی کلاینت تنها از نظر اعتبار در برابر cafile یا capath بررسی میشود، اما با نام کلاینت یا نشانی IP آن تطبیق داده نمیشود! از گزینه -b دستور socat استفاده کنید تا دیتاگرامها به اندازه کافی کوچک شوند که به همراه سرریز در شبکه جای بگیرند. از گزینه -T برای جلوگیری از معلق ماندن نامحدود در زمان قطع بیسر و صدای طرف مقابل استفاده کنید.
گروههای گزینه: FD,SOCKET,IP4,IP6,LISTEN,OPENSSL,CHILD,RANGE,RETRY
گزینههای کاربردی: pf, min-proto-version, cipher, verify, commonname, cafile, capath, certificate, key, compress, fork, bind, range, tcpwrap, su, reuseaddr, retry
rcvtimeo
همچنین ببینید: OPENSSL-DTLS-CLIENT, OPENSSL-LISTEN, UDP-LISTEN - PIPE:<filename>
- اگر <filename> از
قبل وجود
داشته
باشد، باز
میشود. اگر
وجود
نداشته
باشد، یک
لوله
نامگذاریشده
ایجاد و باز
میشود. از
نسخه 1.4.3
دستور socat،
لوله
نامگذاریشده
هنگام بسته
شدن نشانی
حذف میشود
(اما گزینه
unlink-close را
ببینید).
نکته: هنگامی که یک لوله هم برای خواندن و هم برای نوشتن استفاده شود، مانند یک سرویس بازآوا (echo) عمل میکند.
نکته: هنگامی که یک لوله هم برای خواندن و هم برای نوشتن استفاده شود، و socat تلاش کند بایتهای بیشتری نسبت به گنجایش بافر لوله بنویسد (در لینوکس 2.4: ۲۰۴۸ بایت)، ممکن است socat مسدود (block) شود. استفاده از گزینهای در socat، مانند -b 2048 را مد نظر قرار دهید.
گروههای گزینه: FD,NAMED,OPEN
گزینههای کاربردی: rdonly, nonblock, group, user, mode, unlink-early
همچنین ببینید: unnamed pipe.IP "PIPE" یک لوله (pipe) بدون نام ایجاد کرده و از آن برای خواندن و نوشتن استفاده میکند. این آدرس مانند یک پژواکدهنده (echo) عمل میکند، زیرا هر چیزی که در آن نوشته شود بلافاصله به عنوان دادهٔ خواندهشده ظاهر میشود.
نکته: هنگامی که socat تلاش میکند بایتهای بیشتری نسبت به گنجایش صف لوله بنویسد (در لینوکس 2.4: ۲۰۴۸ بایت)، ممکن است socat مسدود (block) شود. برای مثال، استفاده از گزینهٔ -b 2048 را مد نظر قرار دهید.
گروههای گزینه: FD
همچنین ببینید: named pipe، SOCKETPAIR - SOCKETPAIR
- یک socketpair ایجاد
کرده و از
آن برای
خواندن و
نوشتن
استفاده
میکند.
مانند یک
پژواکدهنده
عمل
میکند،
زیرا هر
چیزی که در
آن نوشته
شود
بلافاصله
به عنوان
دادهٔ
خواندهشده
ظاهر
میشود. نوع
سوکت
پیشفرض datagram
است،
بنابراین
مرزهای
بسته (packet boundaries) را
حفظ میکند.
گروههای گزینه: FD
گزینههای کاربردی: socktype
همچنین ببینید: unnamed pipe - STALL
- بخش خواندن این آدرس هرگز دادهای و نه EOF ارائه میدهد؛ بخش نوشتن نیز هرگز برای نوشتن داده آماده نمیشود. این رفتار ممکن است برای آزمایش و برخی سناریوهای ویژه کاربردی باشد.
- TEXT:<string>
- متن
ارائهشده
به عنوان
پارامتر به
عنوان
دادهٔ
ورودی در
نظر گرفته
میشود: در
یک لوله
داخلی بافر
شده و سپس
طبق معمول
پردازش
میشود.
تبدیلهای
استاندارد
روی رشته
اعمال
میشوند،
بنابراین
میتوانید
بررسی کنید
که
پارامترها
چگونه
تجزیه و
آماده
میشوند که
این موضوع
برای
آدرسهایی
مانند EXEC
حیاتی است.
خروجی روی این آدرس به stdout ارسال میشود. بنابراین این آدرس میتواند ساختارهایی مانند:
echo "<string>" | socat STDIO TCP:<server>:<port>
را با:
socat TEXT:"<string>\n" TCP:<server>:<port>
جایگزین کند. به مثال مربوط به sudo در زیر نگاهی بیندازید. - POSIXMQ-READ:/<mqueue>
- صف
پیامهای POSIX
مشخصشده
را باز کرده
یا ایجاد
میکند و
پیامها
(بستهها)
را
میخواند.
این آدرس
مرزهای
بسته را حفظ
میکند.
این یک آدرس فقطخواندنی است؛ گزینههای -u و -U و آدرسهای دوگانه (dual addresses) را ببینید.
Socat این نوع آدرس را فقط در لینوکس ارائه میدهد زیرا POSIX MQ در آنجا مبتنی بر توصیفکنندههای فایل (filedescriptors) یونیکس است.
گزینههای کاربردی: posixmq-priority, unlink-early, unlink-close, o-nonblock, o-creat, o-excl, umask - POSIXMQ-RECEIVE:/<mqueue>
- POSIXMQ-RECV:/<mqueue>
- صف
پیامهای POSIX
مشخصشده
را باز کرده
یا ایجاد
میکند و یک
پیام (بسته)
را
میخواند.
این یک آدرس فقطخواندنی است. برای اطلاعات بیشتر POSIXMQ-READ را ببینید.
مثال: POSIX MQ recv with fork
گزینههای کاربردی: posixmq-priority, fork, max-children, unlink-early, unlink-close, o-creat, o-excl, umask - POSIXMQ-SEND:/<mqueue>
- صف
پیامهای POSIX
مشخصشده
را باز کرده
یا ایجاد
میکند و
پیامها
(بستهها)
را
مینویسد.
این یک آدرس فقطنوشتنی است. برای اطلاعات بیشتر POSIXMQ-READ را ببینید.
(مثال)
گزینههای کاربردی: posixmq-priority, posixmq-flush, fork, max-children, unlink-early, unlink-close, o-creat, o-excl, umask - POSIXMQ-WRITE:/<mqueue>
- همانند POSIXMQ-SEND عمل میکند.
- POSIXMQ-BIDIRECTIONAL:/mqueue
- POSIXMQ:/mqueue
- صف
پیامهای POSIX
مشخصشده
را بسته به
زمینه (context) در
حالت
خواندن و/یا
نوشتن باز
کرده یا
ایجاد
میکند،
سپس
پیامها
(بستهها)
را خوانده
و/یا
مینویسد.
در حالت
دوطرفه این
صرفاً یک
سرویس
پژواکدهنده
دیگر است. POSIXMQ
حالت
دوطرفه را
رد میکند
تا از
خالیشدن
ناخواستهٔ
صف جلوگیری
شود؛ در
صورت نیاز
از POSIXMQ-BIDIRECTIONAL
استفاده
کنید.
برای اطلاعات بیشتر POSIXMQ-READ و POSIXMQ-SEND را ببینید. - PROXY:<proxy>:<hostname>:<port>
- با استفاده
از نسخه ۴
یا ۶ TCP/IP بسته
به تعیین
نشانی،
تحلیل نام
یا گزینهٔ
pf، به یک
کارگزار
پیشکار (HTTP proxy)
روی درگاه
۸۰۸۰ متصل
میشود و یک
درخواست CONNECT
برای hostname:port
ارسال
میکند. اگر
پیشکار
اجازهٔ
دسترسی دهد
و اتصال به
مقصد
موفقیتآمیز
باشد،
انتقال
داده بین socat و
مقصد
میتواند
آغاز شود
(مثال). توجه
داشته
باشید که
ترافیک
لزوماً
نباید HTTP
باشد، بلکه
میتواند
یک پروتکل
دلخواه
باشد.
گروههای گزینه: FD,SOCKET,IP4,IP6,TCP,HTTP,RETRY
گزینههای کاربردی: proxyport, ignorecr, proxyauth, resolve, crnl, bind, connect-timeout, mss, sourceport, retry
همچنین ببینید: SOCKS, TCP - PTY
- یک پایانه
مجازی (pty)
تولید کرده
و از سمت master آن
استفاده
میکند. یک
فرایند
دیگر
میتواند
سمت slave
پایانهٔ
مجازی را
باز کرده و
مانند یک خط
سریال یا
پایانه از
آن استفاده
کند (مثال).
اگر هر دو
سازوکار ptmx و
openpty در دسترس
باشند، از ptmx
استفاده
میشود (POSIX).
گروههای گزینه: FD,NAMED,PTY,TERMIOS
گزینههای کاربردی: link, openpty, wait-slave, mode, user, group
همچنین ببینید: UNIX-LISTEN, PIPE, EXEC, SYSTEM, SHELL - READLINE
- از GNU readline و history روی
stdio استفاده
میکند تا
ویرایش و
استفاده
مجدد از
خطوط ورودی
امکانپذیر
شود (مثال).
این قابلیت
به
کتابخانههای
GNU readline و history نیاز
دارد. توجه
داشته
باشید که stdio
باید یک
دستگاه
پایانه (یا
شبهپایانه)
باشد، در
غیر این
صورت به نظر
میرسد readline
کار
نمیکند.
گروههای گزینه: FD,READLINE,TERMIOS
گزینههای کاربردی: history, noecho
همچنین ببینید: STDIO - SCTP-CONNECT:<host>:<port>
- یک اتصال
جریانی SCTP به
<host> [نشانی IP] و
<port> [سرویس TCP]
مشخصشده
با استفاده
از نسخه ۴
یا ۶ IP بسته
به تعیین
نشانی،
تحلیل نام
یا گزینهٔ pf
برقرار
میکند.
گروههای گزینه: FD,SOCKET,IP4,IP6,SCTP,CHILD,RETRY
گزینههای کاربردی: bind, pf, connect-timeout, tos, mtudiscover, mtudiscover6, sctp-maxseg, sctp-nodelay, nonblock, sourceport, retry, readbytes
همچنین ببینید: SCTP4-CONNECT, SCTP6-CONNECT, SCTP-LISTEN, TCP-CONNECT.IP "SCTP4-CONNECT:<host>:<port>" مانند SCTP-CONNECT، اما فقط از پروتکل IPv4 پشتیبانی میکند.
گروههای گزینه: FD,SOCKET,IP4,SCTP,CHILD,RETRY
- SCTP6-CONNECT:<host>:<port>
- مانند SCTP-CONNECT،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP6,SCTP,CHILD,RETRY
- SCTP-LISTEN:<port>
- روی <port>
[سرویس TCP]
شنود
میکند و یک
اتصال SCTP را
میپذیرد.
نسخه IP
برابر با 4
یا نسخه
مشخصشده
با گزینه
آدرس pf،
گزینه socat (-4، -6)
یا متغیر
محیطی SOCAT_DEFAULT_LISTEN_IP
است. توجه
داشته
باشید که
باز کردن
این نشانی
معمولاً تا
زمان اتصال
یک کلاینت
مسدود
میشود.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP4,IP6,SCTP,RETRY
گزینههای مفید: crnl, fork, bind, range, tcpwrap, pf, max-children, backlog, accept-timeout, sctp-maxseg, sctp-nodelay, su, reuseaddr, retry
همچنین ببینید: SCTP4-LISTEN, SCTP6-LISTEN, TCP-LISTEN, SCTP-CONNECT - SCTP4-LISTEN:<port>
- مانند SCTP-LISTEN،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP4,SCTP,RETRY
- SCTP6-LISTEN:<port>
- مانند SCTP-LISTEN،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP6,SCTP,RETRY - SOCKET-CONNECT:<domain>:<protocol>:<remote-address>
- با استفاده
از
پارامترهای
سوکت اول و
دوم
دادهشده و
SOCK_STREAM (صفحه
راهنمای socket(2)
را ببینید)
یک سوکت
جریانی
ایجاد کرده
و به remote-address متصل
میشود. این
دو پارامتر
سوکت باید
با اعداد int
مشخص شوند.
برای یافتن
مقادیر
مناسب به
مستندات
سیستمعامل
و فایلهای
سرآیند خود
مراجعه
کنید.
آرگومان remote-address
باید نمایش
دادهای از
یک ساختار sockaddr
بدون
مؤلفههای
sa_family و (در BSD) sa_len
باشد.
لطفاً توجه داشته باشید که علاوه بر گزینههای گروههای مشخصشده، در صورت اعمال گزینه -g در socat میتوانید از گزینههای پروتکلهای سطح بالاتر نیز استفاده کنید.
گروههای گزینه: FD,SOCKET,CHILD,RETRY
گزینههای مفید: bind, setsockopt,
همچنین ببینید: TCP, UDP-CONNECT, UNIX-CONNECT, SOCKET-LISTEN, SOCKET-SENDTO - SOCKET-DATAGRAM:<domain>:<type>:<protocol>:<remote-address>
- با استفاده
از سه
پارامتر
سوکت
دادهشده
نخست (صفحه
راهنمای socket(2)
را ببینید)
یک سوکت
دیتاگرام
ایجاد کرده
و دادههای
خروجی را به
remote-address ارسال
میکند. این
سه پارامتر
سوکت باید
با اعداد int
مشخص شوند.
برای یافتن
مقادیر
مناسب به
مستندات
سیستمعامل
و فایلهای
سرآیند خود
مراجعه
کنید.
آرگومان remote-address
باید نمایش
دادهای از
یک ساختار sockaddr
بدون
مؤلفههای
sa_family و (در BSD) sa_len
باشد.
لطفاً توجه داشته باشید که علاوه بر گزینههای گروههای مشخصشده، در صورت اعمال گزینه -g در socat میتوانید از گزینههای پروتکلهای سطح بالاتر نیز استفاده کنید.
گروههای گزینه: FD,SOCKET,RANGE
گزینههای مفید: bind, range, setsockopt,
همچنین ببینید: UDP-DATAGRAM, IP-DATAGRAM, SOCKET-SENDTO, SOCKET-RECV, SOCKET-RECVFROM - SOCKET-LISTEN:<domain>:<protocol>:<local-address>
- با استفاده
از
پارامترهای
سوکت اول و
دوم
دادهشده و
SOCK_STREAM (صفحه
راهنمای socket(2)
را ببینید)
یک سوکت
جریانی
ایجاد کرده
و منتظر
اتصالات
ورودی روی
local-address میماند.
این دو
پارامتر
سوکت باید
با اعداد int
مشخص شوند.
برای یافتن
مقادیر
مناسب به
مستندات
سیستمعامل
و فایلهای
سرآیند خود
مراجعه
کنید.
آرگومان local-address
باید نمایش
دادهای از
یک ساختار sockaddr
بدون
مؤلفههای
sa_family و (در BSD) sa_len
باشد.
لطفاً توجه داشته باشید که علاوه بر گزینههای گروههای مشخصشده، در صورت اعمال گزینه -g در socat میتوانید از گزینههای پروتکلهای سطح بالاتر نیز استفاده کنید.
گروههای گزینه: FD,SOCKET,LISTEN,RANGE,CHILD,RETRY
گزینههای مفید: setsockopt, setsockopt-listen,
همچنین ببینید: TCP, UDP-CONNECT, UNIX-CONNECT, SOCKET-LISTEN, SOCKET-SENDTO, SOCKET-SENDTO - SOCKET-RECV:<domain>:<type>:<protocol>:<local-address>
- با استفاده
از سه
پارامتر
سوکت
دادهشده
(صفحه
راهنمای socket(2)
را ببینید)
یک سوکت
ایجاد کرده
و آن را به
<local-address> مقید
میکند.
دادههای
ورودی را
دریافت
میکند. این
سه پارامتر
باید با
اعداد int
مشخص شوند.
برای یافتن
مقادیر
مناسب به
مستندات
سیستمعامل
و فایلهای
سرآیند خود
مراجعه
کنید.
آرگومان local-address
باید نمایش
دادهای از
یک ساختار sockaddr
بدون
مؤلفههای
sa_family و (در BSD) sa_len
باشد.
گروههای گزینه: FD,SOCKET,RANGE
گزینههای مفید: range, setsockopt, setsockopt-listen
همچنین ببینید: UDP-RECV, IP-RECV, UNIX-RECV, SOCKET-DATAGRAM, SOCKET-SENDTO, SOCKET-RECVFROM - SOCKET-RECVFROM:<domain>:<type>:<protocol>:<local-address>
- با استفاده
از سه
پارامتر
سوکت
دادهشده
(صفحه
راهنمای socket(2)
را ببینید)
یک سوکت
ایجاد کرده
و آن را به
<local-address> مقید
میکند.
دادههای
دریافتی را
تحویل
گرفته و
پاسخها را
برای
فرستنده پس
میفرستد.
سه پارامتر
اول باید به
صورت اعداد
int مشخص شوند.
برای یافتن
مقادیر
مناسب به
مستندات
سیستمعامل
و فایلهای
سرآیند خود
مراجعه
کنید.
آرگومان local-address
باید نمایش
دادهای از
یک ساختار sockaddr
بدون
مؤلفههای
sa_family و (در BSD) sa_len
باشد.
یادداشت مربوط به نشانیهای RECVFROM را ببینید.
گروههای گزینه: FD,SOCKET,CHILD,RANGE
گزینههای مفید: fork, range, setsockopt, setsockopt-listen
همچنین ببینید: UDP-RECVFROM, IP-RECVFROM, UNIX-RECVFROM, SOCKET-DATAGRAM, SOCKET-SENDTO, SOCKET-RECV.IP "SOCKET-SENDTO:<domain>:<type>:<protocol>:<remote-address>" با استفاده از سه پارامتر دادهشدهٔ سوکت، یک سوکت ایجاد میکند (به راهنمای socket(2) مراجعه کنید). دادههای ارسالی را به آدرس دادهشده میفرستد و پاسخها را دریافت میکند. این سه پارامتر باید به صورت اعداد int مشخص شوند. برای یافتن مقادیر مناسب به مستندات سیستمعامل و فایلهای سرآیند (include) خود مراجعه کنید. remote-address باید بازنمایی دادهای از ساختار sockaddr بدون مؤلفههای sa_family و (در BSD) sa_len باشد.
گروههای گزینه: FD,SOCKET
گزینههای کاربردی: bind, setsockopt, setsockopt-listen
همچنین ببینید: UDP-SENDTO, IP-SENDTO, UNIX-SENDTO, SOCKET-DATAGRAM, SOCKET-RECV SOCKET-RECVFROM - ACCEPT-FD:<fdnum>
- انتظار یک
سوکت
شنونده در
<fdnum> را دارد و
یک یا چند
اتصال (با
گزینهٔ fork) را
میپذیرد.
این نوع
آدرس تحت
کنترل systemd در
"inetd mode" مفید
است.
مثال: (example)
گروههای گزینه: FD, SOCKET, TCP, CHILD, RETRY
گزینههای کاربردی: fork, range, sourceport, lowport, tcpwrap - SOCKS4:<socks-server>:<host>:<port>
- از طریق <socks-server>
[آدرس IP] به <host>
[آدرس IPv4] روی
<port> [سرویس TCP]،
با استفاده
از پروتکل socks
نسخهٔ ۴ بر
روی پروتکل
IP نسخهٔ ۴ یا
۶ بسته به
مشخصات
آدرس،
تحلیل نام،
یا گزینهٔ pf
متصل
میشود (example).
گروههای گزینه: FD,SOCKET,IP4,IP6,TCP,SOCKS4,RETRY
گزینههای کاربردی: socksuser, socksport, sourceport, pf, retry
همچنین ببینید: SOCKS5, SOCKS4A, PROXY, TCP - SOCKS4A:<socks-server>:<host>:<port>
- مشابه SOCKS4،
اما از
پروتکل socks
نسخهٔ 4a
استفاده
میکند،
بنابراین
تحلیل نام
میزبان را
به کارگزار
socks واگذار
مینماید.
گروههای گزینه: FD,SOCKET,IP4,IP6,TCP,SOCKS4,RETRY - SOCKS5-CONNECT:<socks-server>:<socks-port>:<target-host>:<target-port>
- SOCKS5-CONNECT:<socks-server>:<target-host>:<target-port>
- از طریق <socks-server>
[آدرس IP] به <target-host>
[آدرس IPv4] روی
<target-port> [سرویس TCP]،
با استفاده
از پروتکل socks
نسخهٔ ۵ بر
روی TCP متصل
میشود. در
حال حاضر
هیچ
سازوکار
احراز
هویتی
ارائه نشده
است.
گروههای گزینه: FD, SOCKET, IP4, IP6, TCP, CHILD, RETRY
گزینههای کاربردی: socksport, socksuser, sockspass, sourceport, pf, retry
همچنین ببینید: SOCKS5-LISTEN, SOCKS4, SOCKS4A, PROXY, TCP - SOCKS5-LISTEN:<socks-server>:<socks-port>:<listen-host>:<listen-port>
- SOCKS5-LISTEN:<socks-server>:<listen-host>:<listen-port>
- با استفاده
از پروتکل socks
نسخهٔ ۵ بر
روی TCP به <socks-server>
[آدرس IP] متصل
میشود و آن
را برای
پذیرش
اتصالهای
ورودی روی
<listen-port> [سرویس TCP]
و مقید به
<-listen-host> [آدرس IPv4]
در وضعیت
شنود قرار
میدهد. در
حال حاضر
هیچ
سازوکار
احراز
هویتی
ارائه نشده
است.
گروههای گزینه: FD, SOCKET, IP4, IP6, TCP, CHILD, RETRY
گزینههای کاربردی: sourceport, pf, retry
همچنین ببینید: SOCKS5-CONNECT, - STDERR
- از
توصیفگر
فایل ۲
استفاده
میکند.
این یک آدرس فقطنوشتنی است، گزینههای -u و -U، و آدرسهای دوگانه (dual addresses) را ببینید.
گروههای گزینه: FD (TERMIOS,REG,SOCKET)
همچنین ببینید: FD - STDIN
- از
توصیفگر
فایل ۰
استفاده
میکند.
این یک آدرس فقطخواندنی است، گزینههای -u و -U، و آدرسهای دوگانه را ببینید.
گروههای گزینه: FD (TERMIOS,REG,SOCKET)
گزینههای کاربردی: readbytes
همچنین ببینید: FD - STDIO
- از
توصیفگر
فایل ۰ برای
خواندن، و ۱
برای نوشتن
استفاده
میکند.
گروههای گزینه: FD (TERMIOS,REG,SOCKET)
گزینههای کاربردی: readbytes
همچنین ببینید: FD - STDOUT
- از
توصیفگر
فایل ۱
استفاده
میکند.
این یک آدرس فقطنوشتنی است، گزینههای -u و -U، و آدرسهای دوگانه را ببینید.
گروههای گزینه: FD (TERMIOS,REG,SOCKET)
همچنین ببینید: FD - SHELL:<shell-command>
- SHELL
- یک
زیرپردازه
را منشعب (fork)
میکند که
ارتباط با
پردازهٔ
والد خود را
برقرار
ساخته و
برنامهٔ
مشخصشده
را با شل
پیکربندیشده
($SHELL) فراخوانی
مینماید.
توجه داشته
باشید که
<shell-command> [رشته]
نباید شامل
’,’ یا "!!"
باشد، و
ممکن است
نویسهٔ ’:’
و
نویسههای
متای شل
نیاز به
محافظت (escape)
داشته
باشند. پس
از شروع
موفقیتآمیز
برنامه، socat
دادهها را
در stdin پردازه
مینویسد و
از stdout آن
میخواند.
هنگامی که بدون پارامتر فراخوانی شود، یک شل تعاملی باز میکند. گروههای گزینه: FD,SOCKET,EXEC,FORK,TERMIOS
گزینههای کاربردی: path, fdin, fdout, chroot, su, su-d, nofork, socktype, pty, stderr, ctty, setsid, pipes, umask, sigint, sigquit
همچنین ببینید: EXEC, SYSTEM.IP "SYSTEM:<shell-command>" یک زیرپردازه را فورک (fork) میکند که ارتباط با پردازه والد خود را برقرار کرده و برنامه مشخصشده را با system() فراخوانی میکند. لطفاً توجه داشته باشید که <shell-command> [رشته] نباید شامل ’,’ یا "!!" باشد، و نویسههای فرا (meta characters) پوسته ممکن است نیاز به حفاظت (escape) داشته باشند. پس از شروع موفقیتآمیز برنامه، socat دادهها را در stdin پردازه مینویسد و از stdout آن میخواند.
گروههای گزینه: FD,SOCKET,EXEC,FORK,TERMIOS
گزینههای مفید: path, fdin, fdout, chroot, su, su-d, nofork, socktype, pty, stderr, ctty, setsid, pipes, umask, sigint, sigquit, netns
همچنین ببینید: EXEC, SHELL - TCP:<host>:<port>
- به <port> [سرویس
TCP] روی <host>
[آدرس IP] با
استفاده از
TCP/IP نسخه ۴ یا ۶
بسته به
مشخصات
نشانی،
تفکیک نام،
یا گزینه pf
متصل
میشود.
گروههای گزینه: FD,SOCKET,IP4,IP6,TCP,RETRY
گزینههای مفید: connect-timeout, retry, sourceport, netns, crnl, bind, pf, tos, mtudiscover, mtudiscover6, mss, nodelay, nonblock, readbytes
همچنین ببینید: TCP4, TCP6, TCP-LISTEN, UDP, SCTP-CONNECT, UNIX-CONNECT - TCP4:<host>:<port>
- مانند TCP،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند
(مثال).
گروههای گزینه: FD,SOCKET,IP4,TCP,RETRY
- TCP6:<host>:<port>
- مانند TCP،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP6,TCP,RETRY
- TCP-LISTEN:<port>
- به <port> [سرویس
TCP] گوش
فرامیدهد
و یک اتصال TCP/IP
را
میپذیرد.
نسخه IP
برابر با ۴
یا نسخه
مشخصشده
با گزینه
نشانی pf،
گزینه socat (-4, -6)،
یا متغیر
محیطی SOCAT_DEFAULT_LISTEN_IP
است. توجه
داشته
باشید که
باز کردن
این نشانی
معمولاً تا
زمان اتصال
یک کلاینت
مسدود (block)
میشود.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP4,IP6,TCP,RETRY
گزینههای مفید: crnl, fork, bind, range, tcpwrap, pf, max-children, backlog, accept-timeout, mss, su, reuseaddr, retry, cool-write
همچنین ببینید: TCP4-LISTEN, TCP6-LISTEN, UDP-LISTEN, SCTP-LISTEN, UNIX-LISTEN, OPENSSL-LISTEN, TCP-CONNECT - TCP4-LISTEN:<port>
- مانند TCP-LISTEN،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند
(مثال).
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP4,TCP,RETRY
- TCP6-LISTEN:<port>
- مانند TCP-LISTEN،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گزینه مفید اضافی: ipv6only
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP6,TCP,RETRY
- TUN[:<if-addr>/<bits>]
- یک دستگاه TUN/TAP
لینوکس
ایجاد کرده
و به صورت
اختیاری
نشانی و netmask
ارائهشده
توسط
پارامترها
را به آن
اختصاص
میدهد.
رابط شبکه
حاصل
تقریباً
برای
استفاده
توسط سایر
پردازهها
آماده است؛
socat به «سمت
سیمی» ("wire side")
آن
خدمترسانی
میکند. این
نشانی
نیازمند
دسترسی
خواندن و
نوشتن به
دستگاه
شبیهساز
تونل،
معمولاً
/dev/net/tun ، و
همچنین
مجوز تنظیم
برخی از
ioctl()s است.
گزینه iff-up
برای
فعالسازی
فوری رابط
لازم است!
نکته: اگر قصد انتقال بستهها بین دو «سمت سیمی» socat را دارید، به پروتکلی نیاز دارید که مرزهای بستهها را حفظ کند، مانند UDP؛ پروتکل TCP ممکن است با گزینه nodelay کار کند.
گروههای گزینه: FD,NAMED,OPEN,TUN
گزینههای مفید: iff-up, tun-device, tun-name, tun-type, interface-mtu, iff-no-pi, netns
همچنین ببینید: ip-recv - UDP:<host>:<port>
- به <port> [سرویس
UDP] روی <host>
[آدرس IP] با
استفاده از
UDP/IP نسخه ۴ یا ۶
بسته به
مشخصات
نشانی،
تفکیک نام،
یا گزینه pf
متصل
میشود.
لطفاً توجه داشته باشید که به دلیل ویژگیهای پروتکل UDP، هیچ اتصال واقعی برقرار نمیشود؛ برای «اتصال» به سرور باید داده ارسال شود، و هیچ وضعیت پایان فایل (end-of-file) قابل انتقال نیست.
از نسخه 1.8.1.0، سوکت هنگام خاموش شدن، یک بسته UDP با طول صفر ارسال میکند که ممکن است وضعیت EOF را در طرف مقابل تحریک کند (گزینه ضمنی shut-null). رفتار پیشین را میتوانید با گزینه shut-none بازیابی کنید.
گروههای گزینه: FD,SOCKET,IP4,IP6
گزینههای مفید: ttl, tos, bind, sourceport, pf
همچنین ببینید: UDP4, UDP6, UDP-LISTEN, TCP, IP.IP "UDP4:<host>:<port>" مشابه UDP، اما فقط از پروتکل IPv4 پشتیبانی میکند.
گروههای گزینه: FD,SOCKET,IP4
- UDP6:<host>:<port>
- مشابه UDP،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP6
- UDP-DATAGRAM:<address>:<port>
- دادههای
خروجی را به
نشانی
مشخصشده
ارسال
میکند که
بهویژه
میتواند
یک نشانی broadcast
یا multicast باشد.
بستههای
ورودی به
سوکت محلی
تنها زمانی
برای پورت
راه دورِ
صحیح بررسی
میشوند که
از گزینهٔ
sourceport استفاده
شده باشد
(این تغییر
از نسخهٔ 1.7.4.0
در Socat اعمال
شده است) و
نشانیهای
مبدأ آنها
با
گزینههای
RANGE یا TCPWRAP
مطابقت
داشته باشد.
این نوع
آدرس
میتواند
برای نمونه
جهت
پیادهسازی
ارتباطات
متقارن یا
نامتقارن broadcast
یا multicast به کار
رود.
گروههای گزینه: FD,SOCKET,IP4,IP6,RANGE
گزینههای مفید: bind, range, tcpwrap, broadcast, ip-multicast-loop, ip-multicast-ttl, ip-multicast-if, ip-add-membership, ip-add-source-membership, ipv6-join-group, ipv6-join-source-group, ttl, tos, sourceport, pf
همچنین ببینید: UDP4-DATAGRAM, UDP6-DATAGRAM, UDP-SENDTO, UDP-RECVFROM, UDP-RECV, UDP-CONNECT, UDP-LISTEN, IP-DATAGRAM - UDP4-DATAGRAM:<address>:<port>
- مشابه UDP-DATAGRAM،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند (example1،
example2).
گروههای گزینه: FD,SOCKET,IP4, RANGE - UDP6-DATAGRAM:<address>:<port>
- مشابه UDP-DATAGRAM،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP6,RANGE - UDP-LISTEN:<port>
- منتظر یک
بستهٔ UDP/IP
ورودی روی
<port> [سرویس UDP]
میماند و
به فرستنده
`connects’ میکند.
نسخهٔ IP
پذیرفتهشده
4 یا نسخهٔ
مشخصشده
با گزینهٔ pf
است. لطفاً
توجه داشته
باشید که به
دلیل
ویژگیهای
پروتکل UDP،
هیچ اتصال
واقعی
برقرار
نمیشود؛
دادهها
ابتدا باید
از سمت طرف
مقابل
برسند،
بنابراین،
باز کردن
این آدرس
معمولاً تا
زمان اتصال
یک کلاینت
مسدود
میشود.
علاوه بر
این، هیچ
وضعیت
پایان
فایلی (EOF) در UDP
مشخص نشده
است.
از نسخهٔ 1.8.1.0، سوکت هنگام خاموش شدن یک بستهٔ UDP با طول صفر میفرستد که ممکن است EOF را در طرف مقابل فعال کند (گزینهٔ ضمنی shut-null). رفتار پیشین را با گزینهٔ shut-none بازیابی کنید.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP4,IP6
گزینههای مفید: fork, bind, range, pf
همچنین ببینید: UDP, UDP4-LISTEN, UDP6-LISTEN, TCP-LISTEN - UDP4-LISTEN:<port>
- مشابه UDP-LISTEN،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP4
- UDP6-LISTEN:<port>
- مشابه UDP-LISTEN،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RANGE,IP6
- UDP-SENDTO:<host>:<port>
- با سوکت
همتای
مشخصشده،
تعریفشده
با <port> [سرویس
UDP] روی <host>
[نشانی IP]، با
استفاده از
UDP/IP نسخهٔ 4 یا 6
بسته به
تعیین
نشانی،
تفکیک نام،
یا گزینهٔ pf
ارتباط
برقرار
میکند. این
آدرس فقط به
آن سوکت
همتا بسته
میفرستد و
فقط از آن
بسته
دریافت
میکند. این
آدرس در
واقع یک
کلاینت
دیتاگرام
را
پیادهسازی
میکند.
بهخوبی با
آدرسهای
همتای UDP-RECVFROM و UDP-RECV
در socat کار
میکند.
هنگامی که
ممکن است
طرف مقابل
ابتدا داده
بفرستد، UDP-DATAGRAM
ترجیح داده
میشود.
گروههای گزینه: FD,SOCKET,IP4,IP6
گزینههای مفید: ttl, tos, bind, sourceport, pf
همچنین ببینید: UDP4-SENDTO, UDP6-SENDTO, UDP-RECVFROM, UDP-RECV, UDP-CONNECT, UDP-LISTEN, IP-SENDTO - UDP4-SENDTO:<host>:<port>
- مشابه UDP-SENDTO،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP4 - UDP6-SENDTO:<host>:<port>
- مشابه UDP-SENDTO،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP6 - UDP-RECVFROM:<port>
- یک سوکت UDP
روی <port>
[سرویس UDP] با
استفاده از
UDP/IP نسخهٔ 4 یا 6
بسته به
گزینهٔ pf
ایجاد
میکند. یک
بسته را از
یک همتای
نامشخص
دریافت
میکند و
ممکن است یک
یا چند
بستهٔ پاسخ
را به همان
همتا ارسال
کند. این
حالت
بهویژه با
گزینهٔ fork
مفید است که
در آن هر
بستهٔ
ورودی - از
همتاهای
دلخواه -
توسط
زیرپردازش
اختصاصی
خود رسیدگی
میشود. این
امر رفتاری
شبیه به
سرورهای
معمول
مبتنی بر UDP
مانند ntpd یا named
را
امکانپذیر
میکند. این
آدرس
بهخوبی با
آدرسهای
همتای UDP-SENDTO در socat
کار میکند.
نکته: هنگامی که آدرس دوم پیش از ورود به حلقهٔ انتقال ناموفق شود، بسته دور انداخته میشود. برای جلوگیری از دست رفتن داده، از گزینهٔ retry یا forever روی آدرس دوم استفاده کنید. هنگامی که نشانی همتا را میدانید، UDP-DATAGRAM ارجح است.
گروههای گزینه: FD,SOCKET,IP4,IP6,CHILD,RANGE
گزینههای مفید: fork, ttl, tos, bind, sourceport, pf
همچنین ببینید: UDP4-RECVFROM, UDP6-RECVFROM, UDP-SENDTO, UDP-RECV, UDP-CONNECT, UDP-LISTEN, IP-RECVFROM, UNIX-RECVFROM - UDP4-RECVFROM:<port>
- مشابه UDP-RECVFROM،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP4,CHILD,RANGE - UDP6-RECVFROM:<port>
- مشابه UDP-RECVFROM،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP6,CHILD,RANGE.IP - UDP-RECV:<port>
- یک سوکت UDP
روی <port>
[سرویس UDP] با
استفاده از
UDP/IP نسخه ۴ یا ۶
بسته به
گزینه pf
ایجاد
میکند.
بستهها را
از چندین
همتای
نامشخص
دریافت
کرده و
دادهها را
با هم ادغام
میکند.
امکان
ارسال پاسخ
وجود ندارد.
این گزینه
بهخوبی
برای مثال
با همتاهای
آدرس UDP-SENDTO در socat
کار
میکند؛
رفتاری
شبیه به یک
سرور syslog دارد.
این یک آدرس فقطخواندنی است، گزینههای -u و -U، و آدرسهای دوگانه (dual addresses) را ببینید.
نکته: اگر به گزینه fork نیاز دارید، بهجای آن از UDP-RECVFROM در حالت یکطرفه (با گزینه -u) استفاده کنید.
گروههای گزینه: FD,SOCKET,IP4,IP6,RANGE
گزینههای کاربردی: pf, bind, sourceport, ttl, tos
همچنین ببینید: UDP4-RECV, UDP6-RECV, UDP-SENDTO, UDP-RECVFROM, UDP-CONNECT, UDP-LISTEN, IP-RECV, UNIX-RECV - UDP4-RECV:<port>
- مانند UDP-RECV،
اما فقط از
پروتکل IPv4
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP4,RANGE - UDP6-RECV:<port>
- مانند UDP-RECV،
اما فقط از
پروتکل IPv6
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,IP6,RANGE - UDPLITE-CONNECT:<host>:<port>
- UDPLITE4-CONNECT:<host>:<port>
- UDPLITE6-CONNECT:<host>:<port>
- UDPLITE-DATAGRAM:<address>:<port>
- UDPLITE4-DATAGRAM:<address>:<port>
- UDPLITE6-DATAGRAM:<address>:<port>
- UDPLITE-LISTEN:<port>
- UDPLITE4-LISTEN:<port>
- UDPLITE6-LISTEN:<port>
- UDPLITE-SENDTO:<host>:<port>
- UDPLITE4-SENDTO:<host>:<port>
- UDPLITE6-SENDTO:<host>:<port>
- UDPLITE-RECVFROM:<port>
- UDPLITE4-RECVFROM:<port>
- UDPLITE6-RECVFROM:<port>
- UDPLITE-RECV:<port>
- UDPLITE4-RECV:<port>
- UDPLITE6-RECV:<port>
- آدرسهای UDPLITE تقریباً با آدرسهای متناظر UDP یکسان هستند اما از پروتکل UDP-Lite استفاده میکنند و دارای گروه گزینه اضافی UDPLITE میباشند.
- UNIX-CONNECT:<filename>
- با فرض
اینکه <filename> یک
سوکت دامنه
یونیکس (UNIX domain socket)
است، به آن
متصل
میشود. اگر
<filename> وجود
نداشته
باشد، این
یک خطا است؛
اگر <filename> یک
سوکت دامنه
یونیکس
نباشد، این
یک خطا است؛
اگر <filename> یک
سوکت دامنه
یونیکس
باشد، اما
هیچ
فرایندی به
آن گوش
ندهد، این
یک خطا است.
گروههای گزینه: FD,SOCKET,NAMED,RETRY,UNIX
) گزینههای کاربردی: bind
همچنین ببینید: UNIX-LISTEN, UNIX-SENDTO, TCP - UNIX-LISTEN:<filename>
- با استفاده
از یک سوکت
جریانی
دامنه
یونیکس (UNIX domain stream
socket) روی <filename> گوش
داده و
اتصال را
میپذیرد.
اگر <filename> وجود
داشته باشد
و یک سوکت
نباشد، این
یک خطا است.
اگر <filename> وجود
داشته باشد
و یک سوکت
دامنه
یونیکس
باشد،
مقیدسازی (bind)
به این آدرس
شکست
میخورد (از
گزینه unlink-early
استفاده
کنید!). توجه
داشته
باشید که
باز کردن
این آدرس
معمولاً تا
زمانی که یک
کلاینت
متصل شود
مسدود
میشود. از
نسخه 1.4.3
برنامه socat به
بعد، مدخل
فایلسیستم
هنگام بسته
شدن این
آدرس حذف
میشود (اما
گزینه unlink-close را
ببینید)
(مثال).
گروههای گزینه: FD,SOCKET,NAMED,LISTEN,CHILD,RETRY,UNIX
گزینههای کاربردی: fork, umask, mode, user, group, unlink-early
همچنین ببینید: UNIX-CONNECT, UNIX-RECVFROM, UNIX-RECV, TCP-LISTEN - UNIX-SENDTO:<filename>
- با سوکت
همتای
مشخصشده
که توسط [<filename>]
تعیین شده
ارتباط
برقرار
میکند، با
این فرض که
یک سوکت
دیتاگرام
دامنه
یونیکس است.
بستهها را
تنها به آن
سوکت همتا
فرستاده و
فقط از آن
بسته
دریافت
میکند.
لطفاً توجه
داشته
باشید که
ممکن است
مقیدسازی (bind)
سوکت محلی
به یک آدرس
لازم باشد
(مثلاً
/tmp/sock1، که
نباید از
قبل وجود
داشته
باشد). این
نوع آدرس
بهخوبی با
همتاهای
آدرس socat از
نوع UNIX-RECVFROM و UNIX-RECV
کار میکند.
گروههای گزینه: FD,SOCKET,NAMED,UNIX
گزینههای کاربردی: bind
همچنین ببینید: UNIX-RECVFROM, UNIX-RECV, UNIX-CONNECT, UDP-SENDTO, IP-SENDTO - UNIX-RECVFROM:<filename>
- یک سوکت
دیتاگرام
دامنه
یونیکس [<filename>]
ایجاد
میکند. یک
بسته
دریافت
کرده و ممکن
است یک یا
چند بسته
پاسخ به آن
همتا ارسال
کند. این
حالت
بهویژه با
گزینه fork
کاربردی
است که در
آن هر بسته
دریافتی -
از همتاهای
دلخواه -
توسط
زیرفرایند
اختصاصی
خودش
پردازش
میشود. این
آدرس
بهخوبی با
همتاهای
آدرس UNIX-SENDTO در socat
کار میکند.
گروههای گزینه: FD,SOCKET,NAMED,CHILD,UNIX
نکته مربوط به آدرسهای RECVFROM را ببینید.
گزینههای کاربردی: fork
umask
همچنین ببینید: UNIX-SENDTO, UNIX-RECV, UNIX-LISTEN, UDP-RECVFROM, IP-RECVFROM - UNIX-RECV:<filename>
- یک سوکت
دیتاگرام
دامنه
یونیکس [<filename>]
ایجاد
میکند.
بستهها را
از چندین
همتای
نامشخص
دریافت
کرده و
دادهها را
با هم ادغام
میکند. هیچ
پاسخی
امکانپذیر
نیست، این
یک آدرس
فقطخواندنی
است،
گزینههای
-u و -U، و
آدرسهای
دوگانه را
ببینید. این
آدرس
میتواند
مثلاً توسط
همتاهای
آدرس UNIX-SENDTO در socat
مورد خطاب
قرار گیرد.
رفتاری
شبیه به یک
سرور syslog دارد.
گروههای گزینه: FD,SOCKET,NAMED,UNIX
گزینههای کاربردی: umask
همچنین ببینید: UNIX-SENDTO, UNIX-RECVFROM, UNIX-LISTEN, UDP-RECV, IP-RECV - UNIX-CLIENT:<filename>
- با سوکت
همتای
مشخصشده،
که توسط [<filename>]
تعریف شده،
با این فرض
که یک سوکت
دامنه
یونیکس است
ارتباط
برقرار
میکند.
ابتدا سعی
میکند
متصل شود و
اگر ناموفق
بود، فرض
میکند که
یک سوکت
دیتاگرام
است؛
بنابراین
از هر دو
نوع
پشتیبانی
میکند.
گروههای گزینه: FD,SOCKET,NAMED,UNIX
گزینههای کاربردی: bind
همچنین ببینید: UNIX-CONNECT, UNIX-SENDTO, GOPEN.IP - VSOCK-CONNECT:<cid>:<port>
- یک اتصال
جریانی (stream)
مربوط به VSOCK
را به <cid>
[شناسه VSOCK cid] و <port>
[درگاه VSOCK]
مشخصشده
برقرار
میکند.
گروههای گزینه: FD,SOCKET,CHILD,RETRY
گزینههای کاربردی: bind, connect-timeout, retry, readbytes
همچنین ببینید: VSOCK-LISTEN, - VSOCK-LISTEN:<port>
- روی <port>
[درگاه VSOCK] گوش
فرا داده و
یک اتصال VSOCK
را
میپذیرد.
توجه داشته
باشید که
باز کردن
این آدرس
معمولاً تا
زمان اتصال
یک کلاینت
مسدود
میشود.
گروههای گزینه: FD,SOCKET,LISTEN,CHILD,RETRY
گزینههای کاربردی: fork, bind, max-children, backlog, su, reuseaddr, retry
همچنین ببینید: VSOCK-CONNECT - ABSTRACT-CONNECT:<string>
- ABSTRACT-LISTEN:<string>
- ABSTRACT-SENDTO:<string>
- ABSTRACT-RECVFROM:<string>
- ABSTRACT-RECV:<string>
- ABSTRACT-CLIENT:<string>
- آدرسهای ABSTRACT
تقریباً با
آدرسهای UNIX
مربوطه
یکسان
هستند، جز
اینکه به
سوکتهای
مبتنی بر
سیستم فایل
اشاره
نمیکنند
بلکه یک
فضای آدرس
دامنه UNIX
جایگزین را
هدف قرار
میدهند.
برای
دستیابی به
این منظور،
رشتههای
آدرس سوکت
در داخل
بهصورت
پیشفرض با
پیشوند "\0"
مقداردهی
میشوند.
این ویژگی
(صرفاً؟) در Linux
موجود است.
گروههای
گزینه
همانند
آدرسهای UNIX
مربوطه
هستند، با
این تفاوت
که
آدرسهای ABSTRACT
عضوی از
گروه NAMED
نیستند.
گزینههای کاربردی: netns
گزینههای آدرس (ADDRESS OPTIONS)
گزینههای آدرس را میتوان روی مشخصات آدرس اعمال کرد تا روند باز کردن آدرسها و ویژگیهای کانالهای داده حاصل تحت تأثیر قرار گیرند.
به دلایل فنی نمیتوان هر گزینهای را برای هر نوع آدرسی اعمال کرد؛ برای مثال، اعمال یک گزینه سوکت روی یک فایل معمولی با شکست مواجه خواهد شد. برای شناسایی بیشتر ترکیبهای غیرقابلاستفاده در همان ابتدای فاز باز کردن، مفهوم گروههای گزینه معرفی شده است. هر گزینه به یک یا چند گروه گزینه تعلق دارد. گزینهها فقط میتوانند با انواع آدرسی استفاده شوند که حداقل از یکی از گروههای گزینه آنها پشتیبانی کنند (اما گزینه -g را ببینید).
گزینههای آدرس دارای انواع دادهای هستند که مقادیر آنها باید با آن نوع مطابقت داشته باشد. هر گزینه آدرس تنها از یک کلیدواژه یا یک کلیدواژه به همراه "=value" تشکیل شده است، که در آن value باید با نوع داده گزینه سازگار باشد. برخی از گزینههای آدرس پارامترهای فراخوانیهای سیستمی را دستکاری میکنند؛ برای مثال، گزینه sync پرچم O_SYNC را در فراخوانی open() تنظیم میکند. گزینههای دیگر موجب یک فراخوانی سیستمی یا کتابخانهای میشوند؛ برای مثال، با گزینه “ttl=value” فراخوانی setsockopt(fd, SOL_IP, IP_TTL, value, sizeof(int)) اعمال میگردد. گزینههای دیگر متغیرهای داخلی socat را تنظیم میکنند که در حین انتقال داده استفاده میشوند؛ برای مثال، “crnl” موجب تبدیل صریح نویسهها میشود. تعداد کمی از گزینهها پیادهسازیهای پیچیدهتری دارند؛ برای مثال، su-d (مخفف substuser-delayed) برخی اطلاعات کاربر و گروه را جویا شده، آنها را ذخیره میکند و بعداً پس از یک فراخوانی احتمالی chroot() اعمال مینماید.
اگر چندین گزینه برای یک آدرس مشخص شود، ترتیب آنها در مشخصه آدرس (تقریباً) هیچ تأثیری بر ترتیب اجرا یا اعمال آنها ندارد. در عوض، socat دارای یک مدل درونی فاز گزینه است که سعی میکند گزینهها را در یک ترتیب سودمند قرار دهد. برخی گزینهها در اشکال متفاوتی وجود دارند (مانند unlink، unlink-early، unlink-late) تا زمان اجرای آنها کنترل شود.
اگر یک گزینه بیش از یک بار در یک مشخصه آدرس تعیین شود، چه با مقادیر یکسان و چه متفاوت، نتیجه به نوع گزینه بستگی دارد. گزینههایی که منجر به فراخوانی توابعی مانند setsockopt() میشوند، باعث چندین بار فراخوانی خواهند شد. در مورد گزینههایی که پارامترهایی را برای یک فراخوانی الزامی مانند open() تعیین میکنند یا پرچمهای داخلی را تنظیم مینمایند، مقدار آخرین رخداد گزینه مؤثر خواهد بود.
وجود یا معناشناسی بسیاری از گزینهها به سیستم وابسته است. Socat معمولاً تلاش نمیکند تا ویژگیهای غایب libc یا هسته را شبیهسازی کند، بلکه صرفاً یک رابط به سیستم زیرین ارائه میدهد. بنابراین، اگر یک سیستمعامل فاقد یک ویژگی باشد، گزینه مربوطه به سادگی در این پلتفرم در دسترس نخواهد بود.
بندهای زیر صرفاً گزینههای رایجتر آدرس را معرفی میکنند. برای یک مرجع جامعتر و یافتن اطلاعاتی در مورد نامهای متعارف گزینهها، نامهای مستعار، فازهای گزینه و پلتفرمها، فایل xio.help را ببینید.
گروه گزینه FD
این گروه
گزینه شامل
گزینههایی
است که بر
روی یک
توصیفگر
فایل به سبک
UN*X اعمال
میشوند،
فارغ از
اینکه
چگونه
ایجاد شده
باشد. از
آنجا که
تمام انواع
آدرسهای
فعلی socat
مبتنی بر
توصیفگر
فایل
هستند، این
گزینهها
میتوانند
بر روی هر
آدرسی
اعمال شوند.
نکته: برخی
از این
گزینهها
همچنین عضو
یک گروه
گزینه دیگر
هستند که
سازوکار
متفاوتی
بدون
استفاده از fd
ارائه
میدهد.
برای این
گزینهها،
بسته به نوع
واقعی آدرس
و گروههای
گزینه آن
مشخص
میشود که
کدام
سازوکار
استفاده
گردد.
سازوکار
دوم (غیر
مبتنی بر fd)
در اولویت
قرار دارد.
- cloexec[=<bool>]
- پرچم FD_CLOEXEC را با فراخوانی سیستمی fcntl() روی مقدار <bool> تنظیم میکند. در صورت تنظیم، توصیفگر فایل در فراخوانیهای خانواده توابع exec() بسته میشود. Socat بهطور داخلی این پرچم را برای fdهایی که کنترل میکند مدیریت مینماید، بنابراین در بیشتر موارد نیازی به اعمال این گزینه نخواهد بود.
- setlk[=<bool>]
- تلاش میکند با استفاده از فراخوانی سیستمی fcntl(fd, F_SETLK, ...) یک قفل نوشتن اختیاری (discretionary) بر روی کل فایل تنظیم کند. اگر فایل قبلاً قفل شده باشد، این فراخوانی منجر به بروز خطا میشود. در Linux، هنگامی که مجوزهای فایل برای گروه به شکل "S" باشد (g-x,g+s) و سیستم فایل بهصورت محلی با گزینه "mand" مانت شده باشد، این قفل اجباری (mandatory) خواهد بود، یعنی از باز کردن فایل توسط سایر فرآیندها جلوگیری میکند.
- setlkw[=<bool>]
- تلاش میکند با استفاده از فراخوانی سیستمی fcntl(fd, F_SETLKW, ...) یک قفل نوشتن انتظاری اختیاری بر روی کل فایل تنظیم کند. اگر فایل قبلاً قفل شده باشد، این فراخوانی مسدود میشود. برای اطلاعات درباره اجباری کردن این قفل، گزینه setlk را ببینید.
- setlk-rd[=<bool>]
- تلاش میکند با استفاده از فراخوانی سیستمی fcntl(fd, F_SETLK, ...) یک قفل خواندن اختیاری بر روی کل فایل تنظیم کند. اگر فایل قبلاً دارای قفل نوشتن باشد، این فراخوانی منجر به خطا میشود. برای اطلاعات درباره اجباری کردن این قفل، گزینه setlk را ببینید.
- setlkw-rd[=<bool>]
- تلاش میکند با استفاده از فراخوانی سیستمی fcntl(fd, F_SETLKW, ...) یک قفل خواندن انتظاری اختیاری بر روی کل فایل تنظیم کند. اگر فایل قبلاً دارای قفل نوشتن باشد، این فراخوانی مسدود میشود. برای اطلاعات درباره اجباری کردن این قفل، گزینه setlk را ببینید.
- flock-ex[=<bool>]
- تلاش میکند با استفاده از فراخوانی سیستمی flock(fd, LOCK_EX) یک قفل مشورتی (advisory) انحصاری مسدودکننده بر روی فایل تنظیم کند. اگر فایل توسط فرآیند دیگری قفل شده باشد، Socat در این فراخوانی متوقف (معلق) میشود.
- flock-ex-nb[=<bool>]
- تلاش میکند با استفاده از فراخوانی سیستمی flock(fd, LOCK_EX|LOCK_NB) یک قفل مشورتی انحصاری نامسدودکننده بر روی فایل تنظیم کند. اگر فایل از قبل قفل شده باشد، این گزینه منجر به بروز خطا میشود..IP "flock-sh[=<bool>]" تلاش میکند با استفاده از فراخوان سیستمی flock(fd, LOCK_SH) یک قفل مشورتی اشتراکی انسدادی روی فایل برقرار کند. در صورتی که فایل توسط فرایند دیگری قفل شده باشد، Socat در این فراخوان معلق میماند.
- flock-sh-nb[=<bool>]
- تلاش میکند با استفاده از فراخوان سیستمی flock(fd, LOCK_SH|LOCK_NB) یک قفل مشورتی اشتراکی غیرانسدادی روی فایل برقرار کند. اگر فایل از قبل قفل شده باشد، این گزینه منجر به بروز خطا میشود.
- lock[=<bool>]
- یک قفل انسدادی روی فایل تنظیم میکند. بسته به در دسترس بودن در بستر مربوطه، از سازوکار setlk یا flock استفاده میکند. اگر هر دو موجود باشند، گونهٔ POSIX یعنی (setlkw) به کار گرفته میشود.
- user=<user>
- کاربر <user> (مالک) جریان را تعیین میکند. اگر نشانی عضوی از گروه گزینههای NAMED باشد، socat پس از باز کردن فایل یا مقید شدن (bind) به سوکت دامنهٔ UNIX، از فراخوان سیستمی chown() استفاده میکند (وضعیت رقابتی!). در صورت عدم وجود مدخل سیستمفایل، socat کاربر جریان را با استفاده از فراخوان سیستمی fchown() تعیین میکند. این فراخوانها ممکن است به دسترسی ریشه (root) نیاز داشته باشند.
- user-late=<user>
- مالک fd را پس از باز کردن یا متصل کردن کانال، با استفاده از فراخوان سیستمی fchown() به <user> تغییر میدهد. این گزینه فقط روی مدخلهای سیستمفایل مفید است.
- group=<group>
- گروه <group> جریان را تعیین میکند. اگر نشانی عضوی از گروه گزینههای NAMED باشد، socat پس از باز کردن فایل یا مقید شدن (bind) به سوکت دامنهٔ UNIX، از فراخوان سیستمی chown() استفاده میکند (وضعیت رقابتی!). در صورت عدم وجود مدخل سیستمفایل، socat گروه جریان را با فراخوان سیستمی fchown() تعیین میکند. این فراخوانها ممکن است نیازمند عضویت در گروه یا امتیازات ریشه (root) باشند.
- group-late=<group>
- گروه fd را پس از باز کردن یا متصل کردن کانال، با استفاده از فراخوان سیستمی fchown() به <group> تنظیم میکند. این گزینه فقط روی مدخلهای سیستمفایل مفید است.
- mode=<mode>
- حالت <mode> [از
نوع mode_t]
(مجوزهای
دسترسی)
جریان را
تنظیم
میکند. اگر
نشانی عضوی
از گروه
گزینههای
NAMED بوده و از
فراخوانهای
open() یا
creat()
استفاده
کند، این
حالت همراه
با آنها
اعمال
میشود. اگر
نشانی عضوی
از گروه
گزینههای
NAMED باشد بدون
آنکه از
این
فراخوانهای
سیستمی
استفاده
کند، socat پس
از باز کردن
مدخل
سیستمفایل
یا مقید شدن
(bind) به سوکت
دامنهٔ UNIX،
از فراخوان
سیستمی
chmod()
استفاده
میکند
(وضعیت
رقابتی!). در
غیر این
صورت، socat
حالت جریان
را با
استفاده از
fchmod() تنظیم
میکند که
البته ممکن
است هیچ
اثری
نداشته
باشد.
این فراخوانها ممکن است نیازمند مالکیت فایل یا دسترسی ریشه باشند.
نکته: این گزینه تنها میتواند مجوزهای حاصل از umask فرایند را محدودتر کند. برای سهلگیرانهتر کردن مجوزها گزینهٔ umask را ببینید. - perm-late=<mode>
- مجوزهای دسترسی fd را پس از باز کردن یا متصل کردن کانال، با استفاده از فراخوان سیستمی fchmod() به مقدار <mode> [از نوع mode_t] تنظیم میکند. این گزینه فقط روی مدخلهای سیستمفایل مفید است.
- append[=<bool>]
- همیشه دادهها را در انتهای واقعی فایل مینویسد. اگر نشانی عضوی از گروه گزینههای OPEN باشد، socat پرچم O_APPEND را همراه با فراخوان سیستمی open() به کار میبرد (مثال). در غیر این صورت، socat فراخوان fcntl(fd, F_SETFL, O_APPEND) را اعمال میکند.
- nonblock[=<bool>]
- تلاش میکند فایل را در حالت غیرانسدادی باز کرده یا استفاده کند. تنها اثرات آن این است که فراخوان connect() برای نشانیهای TCP مسدود نمیشود، و باز کردن یک لولهٔ نامگذاریشده (named pipe) برای خواندن مسدود نمیگردد. اگر نشانی عضوی از گروه گزینههای OPEN باشد، socat از پرچم O_NONBLOCK همراه با فراخوان سیستمی open() استفاده میکند. در غیر این صورت، socat فراخوان fcntl(fd, F_SETFL, O_NONBLOCK) را اعمال میکند.
- binary[=<bool>]
- فایل را در حالت دودویی باز میکند تا از تبدیلهای ضمنی پایان خط جلوگیری شود (Cygwin).
- text[=<bool>]
- فایل را در حالت متنی باز میکند تا تبدیلهای ضمنی پایان خط اعمال شوند (Cygwin).
- noinherit[=<bool>]
- این فایل را در فرایند ایجادشده (spawned) باز نگه نمیدارد (Cygwin).
- cool-write[=<bool>]
- هنگامی که
نوشتن با EPIPE
یا ECONNRESET
ناموفق
میشود
آسان
میگیرد و
پیام را به
جای سطح error
با سطح notice
ثبت میکند.
این کار از
پر شدن فایل
گزارش با
پیامهای
خطای
بیفایده
جلوگیری
میکند؛
بهویژه
هنگامی که
socat به عنوان
سرور یا
پروکسی با
حجم بالای
داده
استفاده
میشود که
در آن
کلاینتها
اغلب اتصال
را قطع
میکنند. از
این گزینه
تنها به
همراه
گزینهٔ fork
استفاده
کنید، زیرا
در غیر این
صورت ممکن
است باعث
شود socat حتی
در صورت
شکست، با کد
0 خارج شود.
این گزینه منسوخ شده است، به جای آن استفاده از گزینهٔ children-shutup را در نظر بگیرید. - end-close[=<bool>]
- روش پایان
دادن به
اتصال
(وابسته به
نشانی) را
صرفاً به
بستن
توصیفگرهای
فایل تغییر
میدهد. این
گزینه
زمانی مفید
است که
اتصال قرار
است توسط
فرایندهای
دیگر مورد
استفادهٔ
مجدد قرار
گیرد یا با
آنها به
اشتراک
گذاشته شود
(مثال).
بهطور معمول، اتصالات سوکت با shutdown(2) پایان مییابند که سوکت را حتی اگر بین چند فرایند به اشتراک گذاشته شده باشد خاتمه میدهد. close(2) سوکت را از فرایند "پیوندزدایی" میکند اما تا زمانی که هنوز پیوندهایی از دیگر فرایندها وجود داشته باشد، آن را فعال نگه میدارد.
به همین ترتیب، هنگامی که نشانی از نوع EXEC یا SYSTEM پایان مییابد، socat معمولاً زیرفرایند را صراحتاً میکشد (kill میکند). با این گزینه، تنها توصیفگرهای فایل را خواهد بست. - shut-none[=<bool>]
- روش قطع کردن بخش نوشتاری اتصال (وابسته به نشانی) را به گونهای تغییر میدهد که کاری انجام ندهد.
- shut-down[=<bool>]
- روش قطع کردن بخش نوشتاری اتصال (وابسته به نشانی) را به shutdown(fd, SHUT_WR) تغییر میدهد. فقط برای سوکتها کاربرد دارد.
- shut-close[=<bool>]
- روش قطع کردن بخش نوشتاری اتصال (وابسته به نشانی) را به close(fd) تغییر میدهد.
- shut-null[=<bool>]
- هنگامی که یک نشانی به EOF اشاره میکند، socat یک بسته با اندازهٔ صفر به کانال نوشتاری نشانی دیگر ارسال میکند تا وضعیت EOF را منتقل کند. این قابلیت برای UDP و سایر پروتکلهای دیتاگرام سودمند است. در برابر netcat و socat با گزینهٔ null-eof آزمایش شده است.
- null-eof[=<bool>]
- بهطور معمول socat بستههای خالی (با بار مفید اندازهٔ صفر) ورودی به سوکتهای دیتاگرام را نادیده میگیرد تا در برابر پویش درگاهها مقاومت کند. با این گزینه، socat بستههای خالی دیتاگرام را به عنوان نشانگر EOF تفسیر میکند (گزینهٔ shut-null را ببینید).
- ioctl-void=<request>
- فراخوان ioctl() را با مقدار request به عنوان آرگومان دوم و NULL به عنوان آرگومان سوم فراخوانی میکند. این گزینه امکان استفاده از ioctlهایی را فراهم میآورد که به صراحت در socat پیادهسازی نشدهاند.
- ioctl-int=<request>:<value>
- فراخوان ioctl() را با مقدار request به عنوان آرگومان دوم و مقدار عدد صحیح به عنوان آرگومان سوم فراخوانی میکند.
- ioctl-intp=<request>:<value>
- فراخوان ioctl() را با مقدار request به عنوان آرگومان دوم و اشارهگری به مقدار عدد صحیح به عنوان آرگومان سوم فراخوانی میکند.
- ioctl-bin=<request>:<value>
- فراخوان ioctl() را با مقدار request به عنوان آرگومان دوم و اشارهگری به مقدار دادهٔ مشخصشده به عنوان آرگومان سوم فراخوانی میکند. این داده باید در قالب <dalan> مشخص شود.
- ioctl-string=<request>:<value>
- فراخوان ioctl() را با مقدار request به عنوان آرگومان دوم و اشارهگری به رشتهٔ مشخصشده به عنوان آرگومان سوم فراخوانی میکند. قالب <dalan>.
گروه
گزینههای
NAMED.PP این
گزینهها
روی
مدخلهای
سامانه
فایل عمل
میکنند.
لطفاً توجه
داشته
باشید که در
نشانیهای
کلاینت
دامنهٔ UNIX،
این به معنی
مدخل bind است،
نه مدخل
هدف/همتا (target/peer).
همچنین
گزینههای
user، group و mode را
ببینید.
- user-early=<user>
- پیش از دسترسی به مدخل سامانه فایل، <user> (مالک) آن را با استفاده از فراخوان سیستمی chown() تغییر میدهد. این فراخوان ممکن است به امتیاز ریشه (root) نیاز داشته باشد.
- group-early=<group>
- پیش از دسترسی به مدخل سامانه فایل، <group> آن را با استفاده از فراخوان سیستمی chown() تغییر میدهد. این فراخوان ممکن است به عضویت در گروه یا امتیاز ریشه نیاز داشته باشد.
- perm-early=<mode>
- پیش از دسترسی به مدخل سامانه فایل، <mode> [از نوع mode_t] آن را با استفاده از فراخوان سیستمی chmod() تغییر میدهد. این فراخوان ممکن است به مالکیت یا امتیاز ریشه نیاز داشته باشد.
- unlink-early[=<bool>]
- فایل را پیش از باز کردن آن و حتی پیش از اعمال user-early و غیره حذف (unlink) میکند.
- unlink[=<bool>]
- فایل را پیش از دسترسی به آن، اما پس از user-early و غیره حذف (unlink) میکند.
- unlink-late[=<bool>]
- فایل را پس از باز کردن حذف (unlink) میکند تا پس از یک شرایط مسابقهٔ (race condition) کوتاه، برای سایر فرایندها غیرقابل دسترسی شود.
- unlink-close[=<bool>]
- حذف مدخل سامانه فایل نشانی را هنگام بستن آن کنترل میکند. برای لولههای نامگذاریشده (named pipes)، سوکتهای دامنهٔ UNIX، و پیوندهای نمادین نشانیهای pty، پیشفرض حذف کردن (1) است؛ برای فایلهای ایجادشده، فایلهای بازشده و فایلهای بازشدهٔ عمومی پیشفرض نگهداشتن (0) است. تنظیم این گزینه روی 1 مدخل را حذف میکند و 0 آن را نگه میدارد. نبود مقدار به معنای 1 است.
گروه گزینههای OPEN
گزینههای
گروه OPEN
امکان
تنظیم
پرچمها را
با فراخوان
سیستمی
open() فراهم
میکنند.
برای
نمونه،
گزینهٔ `creat’
پرچم O_CREAT
را تنظیم
میکند.
هنگامی که
نشانیِ
استفادهشده
از open()
استفاده
نمیکند
(مانند STDIO)،
فراخوان
fcntl(..., F_SETFL, ...)
بهجای آن
به کار
میرود.
همچنین
گزینههای
append و nonblock را
ببینید.
- creat[=<bool>]
- در صورتی که فایل وجود نداشته باشد، آن را ایجاد میکند (نمونه).
- dsync[=<bool>]
- فراخوانهای write() را تا زمانی که فراداده (metainfo) بهصورت فیزیکی روی رسانه نوشته شود مسدود میکند.
- excl[=<bool>]
- همراه با گزینهٔ creat، اگر فایل از قبل موجود باشد یک خطا محسوب میشود.
- largefile[=<bool>]
- روی سامانههای ۳۲ بیتی، امکان فایلی بزرگتر از 2^31 بایت را فراهم میکند.
- noatime[=<bool>]
- گزینهٔ O_NOATIME را تنظیم میکند تا خواندنها مهرزمانی دسترسی را تغییر ندهند.
- noctty[=<bool>]
- این فایل را به پایانهٔ کنترلی تبدیل نمیکند.
- nofollow[=<bool>]
- پیوندهای نمادین را دنبال نمیکند.
- اجازهٔ همرسانی این فایل را با سایر فرایندها نمیدهد.
- به سایر فرایندها اجازه نمیدهد این فایل را برای نوشتن باز کنند.
- rsync[=<bool>]
- فراخوان write() را تا زمانی که فراداده بهصورت فیزیکی روی رسانه نوشته شود مسدود میکند.
- sync[=<bool>]
- فراخوان write() را تا زمانی که دادهها بهصورت فیزیکی روی رسانه نوشته شوند مسدود میکند.
- rdonly[=<bool>]
- فایل را فقط برای خواندن باز میکند.
- wronly[=<bool>]
- فایل را فقط برای نوشتن باز میکند.
- trunc[=<bool>]
- هنگام باز کردن فایل، اندازهٔ آن را به ۰ برش میدهد (truncate میکند).
گروه گزینههای REG و BLK
این گزینهها معمولاً روی یک توصیفگر فایل UN*X اعمال میشوند، اما مفهوم آنها تنها روی فایلی معنادار است که از دسترسی تصادفی (random access) پشتیبانی کند.
- seek=<offset>
- فراخوان سیستمی lseek(fd, <offset>, SEEK_SET) (یا lseek64 ) را اعمال میکند، و در نتیجه اشارهگر فایل را بهصورت مطلق در موقعیت <offset> [از نوع off_t یا off64_t] قرار میدهد. لطفاً توجه داشته باشید که در صورت ذکر نشدن مقدار، مقدار پیشفرض ۱ است، نه ۰.
- seek-cur=<offset>
- فراخوان سیستمی lseek(fd, <offset>, SEEK_CUR) (یا lseek64 ) را اعمال میکند، و بدین ترتیب اشارهگر فایل را به میزان <offset> بایت [از نوع off_t یا off64_t] نسبت به موقعیت فعلیاش (که معمولاً ۰ است) جابهجا میکند. لطفاً توجه داشته باشید که در صورت ذکر نشدن مقدار، مقدار پیشفرض ۱ است، نه ۰.
- seek-end=<offset>
- فراخوان سیستمی lseek(fd, <offset>, SEEK_END) (یا lseek64 ) را اعمال میکند، و بدین ترتیب اشارهگر فایل را به میزان <offset> بایت [از نوع off_t یا off64_t] نسبت به انتهای فعلی فایل قرار میدهد. لطفاً توجه داشته باشید که در صورت ذکر نشدن مقدار، مقدار پیشفرض ۱ است، نه ۰.
- ftruncate=<offset>
- فراخوان سیستمی ftruncate(fd, <offset>) (یا در صورت در دسترس بودن ftruncate64 ) را اعمال میکند، و بدین ترتیب فایل را در موقعیت <offset> [از نوع off_t یا off64_t] برش میدهد. لطفاً توجه داشته باشید که در صورت ذکر نشدن مقدار، مقدار پیشفرض ۱ است، نه ۰.
- secrm[=<bool>]
- unrm[=<bool>]
- compr[=<bool>]
- fs-sync[=<bool>]
- immutable[=<bool>]
- fs-append[=<bool>]
- nodump[=<bool>]
- fs-noatime[=<bool>]
- journal-data[=<bool>]
- notail[=<bool>]
- dirsync[=<bool>]
- این گزینهها ویژگیهای غیراستاندارد فایل را در سیستمهای عامل و سامانههای فایلی که از این قابلیتها پشتیبانی میکنند تغییر میدهند، مانند لینوکس با ext2fs و جانشینان آن، xfs، یا reiserfs. برای کسب اطلاعات دربارهٔ این گزینهها man 1 chattr را ببینید. لطفاً توجه داشته باشید که ممکن است بین ایجاد فایل و اعمال این گزینهها یک شرایط مسابقه (race condition) وجود داشته باشد.
گزینههای PIPE
این گزینهها ممکن است روی لولهها (pipes / fifos) اعمال شوند.
- f-setpipe-sz=<int>
- setpipe=<int>
- تعداد بایتهایی را که یک لوله میتواند بافر کند تنظیم میکنند. در جایی که بایتهای بیشتری نوشته شود فرایند نویسنده ممکن است مسدود شود. هنگامی که در یک فراخوان write() تکی بایتهای بیشتری نوشته شود، فرایند نویسنده مسدود میشود و ممکن است هرگز بازیابی نشود.
گزینههای عمومی نشانی.PP این گزینهها میتوانند برای همهٔ انواع آدرسها اِعمال شوند. آنها برخی از ویژگیهای فرآیند را تغییر میدهند که پس از باز کردن آدرس، به حالت اولیه بازگردانده میشوند.
- chdir=<filename>
- cd=<filename>
- دایرکتوری کاری را تغییر میدهد. پس از باز کردن آدرس، فرآیند اصلی (master) به دایرکتوری کاری اولیه بازمیگردد. زیرفرآیندها این تنظیم موقت را به ارث میبرند.
- umask=<mode>
- مقدار umask
فرآیند را
پیش از باز
کردن آدرس
به <mode> [از نوع
mode_t] تنظیم
میکند. این
گزینه
هنگام
ایجاد
ورودیهای
فایلسیستم
یا
فراخوانی
شل یا یک
برنامه
کاربردی
است.
معمولاً
این مقدار
بهصورت یک
عدد
هشتهشتی (octal)
با یک ’0’
پیشرو مشخص
میشود.
مقدار umask فرآیند توسط فرآیندهای فرزند به ارث برده میشود.
نکته: umask یک مقدار وارونه است: ایجاد یک فایل با umask=0026 منتج به مجوزهای 0640 میشود.
گروه گزینههای PROCESS
گزینههای این گروه به جای اینکه صرفاً روی یک کانال داده اثر بگذارند، ویژگیهای فرآیند را تغییر میدهند. برای آدرسهای EXEC و SYSTEM و برای آدرسهای از نوع LISTEN و CONNECT همراه با گزینهٔ fork، این گزینهها به جای فرآیند اصلی socat بر فرآیندهای فرزند اِعمال میشوند.
- chroot=<directory>
- پس از پردازش آدرس، یک عملیات chroot() به <directory> انجام میدهد (مثال). این فراخوانی ممکن است به امتیازات ریشه (root) نیاز داشته باشد.
- chroot-early=<directory>
- پیش از باز کردن آدرس، یک عملیات chroot() به <directory> انجام میدهد. این فراخوانی ممکن است به امتیازات ریشه (root) نیاز داشته باشد.
- setgid=<group>
- پس از پردازش آدرس، گروه اصلی (<group>) فرآیند را تغییر میدهد. این فراخوانی ممکن است به امتیازات ریشه (root) نیاز داشته باشد. لطفاً توجه داشته باشید که این گزینه سایر امتیازات مرتبط با گروه را لغو نمیکند.
- setgid-early=<group>
- مشابه setgid است اما پیش از باز کردن آدرس انجام میشود.
- setuid=<user>
- پس از پردازش آدرس، کاربر (<user> یا مالک) فرآیند را تغییر میدهد. این فراخوانی ممکن است به امتیازات ریشه (root) نیاز داشته باشد. لطفاً توجه داشته باشید که این گزینه امتیازات مرتبط با گروه را لغو نمیکند. بررسی کنید که آیا گزینهٔ su برای نیازهای شما مناسبتر است یا خیر.
- setuid-early=<user>
- مشابه setuid است اما پیش از باز کردن آدرس انجام میشود.
- su=<user>
- پس از پردازش آدرس، کاربر (<user> یا مالک) و گروههای فرآیند را تغییر میدهد (مثال). این فراخوانی ممکن است به امتیازات ریشه (root) نیاز داشته باشد.
- su-d=<user>
- نام کوتاه برای substuser-delayed. پس از پردازش آدرس، کاربر (<user> یا مالک) و گروههای فرآیند را تغییر میدهد (مثال). کاربر و گروههای آن پیش از یک chroot() احتمالی واکشی میشوند. این فراخوانی ممکن است به امتیازات ریشه (root) نیاز داشته باشد.
- setpgid=<pid_t>
- فرآیند را به عضوی از گروه فرآیند مشخصشدهٔ <pid_t> تبدیل میکند. اگر مقداری داده نشود، یا اگر مقدار 0 یا 1 باشد، فرآیند رهبر یک گروه فرآیند جدید میشود.
- setsid
- فرآیند را به رهبر یک نشست (session) جدید تبدیل میکند (مثال).
- netns=<net-namespace-name>
- پیش از باز
کردن آدرس
تلاش
میکند تا
به فضای نام
شبکهٔ (network namespace)
مشخصشده
تغییر
وضعیت دهد.
پس از باز
کردن آدرس
به فضای نام
پیشین
بازمیگردد
(مثال با
فورواردر
TCP، مثال با
اتصال
شبکهٔ
مجازی).
تنها در لینوکس؛ این گزینه نیازمند ریشه (root) است و آزمایشی محسوب میشود.
گروه گزینههای READLINE
این گزینهها برای آدرسهای از نوع readline به کار میروند.
- history=<filename>
- تاریخچه را از/به <filename> میخواند و مینویسد (مثال).
- noprompt
- از نسخهٔ 1.4.0، socat بهطور پیشفرض تلاش میکند با به خاطر سپردن آخرین خط ناقص خروجی، اعلانی (prompt) را تشخیص دهد که سپس به فراخوانی readline ارسال میشود. با این گزینه، socat اعلانی به readline ارسال نمیکند، بنابراین ویرایش خط در ستون نخست ترمینال آغاز میشود.
- noecho=<pattern>
- یک الگوی باقاعده برای اعلان مشخص میکند که مانع از نمایش خط ورودی بعدی در صفحه و افزوده شدن آن به تاریخچه میشود. اعلان بهصورت متنی تعریف میشود که پس از آخرین نویسهٔ خط جدید (newline) و پیش از تایپ یک نویسهٔ ورودی، در آدرس readline چاپ شده است. این الگو یک عبارت منظم است، به عنوان مثال "^[Pp]assword:.*$" یا "([Uu]ser:|[Pp]assword:)". برای جزئیات به regex(7) مراجعه کنید. (مثال)
- prompt=<string>
- رشته را بهعنوان اعلان (prompt) به تابع readline ارسال میکند. هنگام پیمایش در تاریخچه، readline این اعلان را چاپ میکند. اگر این رشته با یک اعلان ثابت که توسط برنامهای تعاملی در آدرس دیگر socat صادر میشود مطابقت داشته باشد، میتوان به ظاهر و رفتاری یکپارچه دست یافت.
گروه گزینههای APPLICATION
این گروه شامل گزینههایی است که در سطح داده عمل میکنند. توجه داشته باشید که این گزینهها تنها بر دادههای خام ("raw") منتقلشده توسط socat اِعمال میشوند، و نه بر دادههای پروتکل که توسط آدرسهایی مانند PROXY استفاده میشوند.
- cr
- هنگام نوشتن/خواندن در این کانال، نویسهٔ پیشفرض پایان خط NL (’\n’، 0x0a) را به/از CR (’\r’، 0x0d) تبدیل میکند.
- crnl
- هنگام نوشتن/خواندن در این کانال، نویسهٔ پیشفرض پایان خط NL (’\n’، 0x0a) را به/از CRNL ("\r\n"، 0x0d0a) تبدیل میکند (مثال). نکته: socat بهسادگی تمامی نویسههای CR را حذف میکند.
- ignoreeof
- هنگامی که EOF در این کانال رخ میدهد، socat آن را نادیده گرفته و تلاش میکند دادههای بیشتری بخواند (مانند "tail -f") (مثال).
- readbytes=<bytes>
- socat تنها همین تعداد بایت را از این آدرس میخواند (آدرس تنها این مقدار بایت را برای انتقال فراهم کرده و پس از آن وانمود میکند به EOF رسیده است). باید بزرگتر از 0 باشد.
- lockfile=<filename>
- اگر lockfile وجود داشته باشد، با خطا خارج میشود. اگر lockfile وجود نداشته باشد، آن را ایجاد کرده و ادامه میدهد، و در هنگام خروج lockfile را حذف (unlink) میکند.
- waitlock=<filename>
- اگر lockfile وجود داشته باشد، تا زمان ناپدید شدن آن منتظر میماند. زمانی که lockfile وجود نداشته باشد، آن را ایجاد کرده و ادامه میدهد، و در هنگام خروج lockfile را حذف (unlink) میکند.
- escape=<int>
- کد عددی نویسهای را مشخص میکند که باعث تحریک EOF در جریان ورودی میشود. این گزینه در ترمینال در حالت خام (raw mode) مفید است (مثال).
گروه گزینههای SOCKET
این گزینهها برای همهٔ انواع سوکتها، به عنوان مثال IP یا دامنهٔ UNIX در نظر گرفته شدهاند. بیشتر آنها با یک فراخوانی setsockopt() اِعمال میشوند.
- bind=<sockname>
- با استفاده
از
فراخوانی
سیستمی
bind() سوکت
را به نشانی
سوکت
دادهشده
مقید (bind)
میکند.
ساختار <sockname>
به دامنهٔ
سوکت بستگی
دارد: در IP4 و IP6
به شکل
[hostname|hostaddress][:(service|port)] مجاز
است (مثال)،
و در VSOCK به شکل
[cid][:(port)] مجاز است.
همچنین ببینید: unix-bind-tempname - connect-timeout=<seconds>
- تلاش برای برقراری اتصال را پس از <seconds> [از نوع timeval] با وضعیت خطا لغو میکند.
- so-bindtodevice=<interface>
- سوکت را به <interface> دادهشده مقید میکند. این گزینه ممکن است به امتیازات ریشه (root) نیاز داشته باشد.
- broadcast
- برای سوکتهای دیتاگرام، ارسال به آدرسهای برودکست (پخش همگانی) و دریافت بستههای آدرسدهیشده به آدرسهای برودکست را امکانپذیر میسازد.
- debug
- اشکالزدایی (debugging) سوکت را فعال میکند.
- dontroute
- فقط با همتایانی که مستقیماً متصل هستند ارتباط برقرار میکند و از مسیریابها (روترها) استفاده نمیکند.
- keepalive
- ارسال پیامهای نگهداری اتصال (keepalive) را روی سوکت فعال میکند.
- linger=<seconds>
- عملیات shutdown() یا close() را تا زمان اتمام انتقال دادهها یا سپری شدن زمان انتظار مشخصشده [از نوع int] مسدود میکند (بلوکه میکند)..IP "oobinline" دادههای خارج از باند (out-of-band) را در جریان دادههای ورودی قرار میدهد.
- priority=<priority>
- مقدار <priority> [<int>] تعریفشده توسط پروتکل را برای بستههای خروجی تنظیم میکند.
- rcvbuf=<bytes>
- اندازه بافر دریافت را پس از فراخوانی socket() روی <bytes> [int] تنظیم میکند. در سوکتهای TCP، این مقدار متناظر با بیشینه اندازه پنجره (window size) سوکت است.
- rcvbuf-late=<bytes>
- اندازه بافر دریافت را هنگامی که سوکت از پیش متصل شده است روی <bytes> [int] تنظیم میکند. در سوکتهای TCP، این مقدار متناظر با بیشینه اندازه پنجره سوکت است.
- so-rcvtimeo=<time>, rcvtimeo=<time>
- مدت زمان [int] تا اتمام مهلت زمانی (timeout) توابعی مانند recv() ، read() و غیره را در صورتی که هیچ دادهای دریافت نشود، مشخص میکند. توجه داشته باشید که در فاز انتقال، socat تنها زمانی این توابع را فراخوانی میکند که select() در دسترس بودن داده را گزارش داده باشد. با این حال، این گزینه برای آدرسهای DTLS جهت اتمام مهلت زمانی در حین مذاکره اتصال مفید است.
- so-sndtimeo=<time>, sndtimeo=<time>
- مشابه so-rcvtimeo، اما برای send . مورد کاربرد شناختهشدهای وجود ندارد.
- rcvlowat=<bytes>
- حداقل تعداد بایتهای دریافتی [int] را مشخص میکند تا لایه سوکت، دادههای بافرشده را به socat تحویل دهد.
- reuseaddr[=[0|1]]
- به سایر
سوکتها
اجازه
میدهد به
یک آدرس
متصل (bind)
شوند، حتی
اگر
بخشهایی
از آن
(مانند
درگاه محلی)
از پیش توسط
socat در حال
استفاده
باشد.
از نسخه 1.8.0، این گزینه سوکت بهطور خودکار برای آدرسهای TCP LISTEN تنظیم میشود. اگر پیشفرض سیستم را ترجیح میدهید (عدم فراخوانی setsockopt(...SO_REUSEADDR...) بهطور کلی)، از شکل reuseaddr= استفاده کنید.
(مثال). - sndbuf=<bytes>
- اندازه بافر ارسال را پس از فراخوانی socket() روی <bytes> [int] تنظیم میکند.
- sndbuf-late=<bytes>
- اندازه بافر ارسال را هنگامی که سوکت متصل شد روی <bytes> [int] تنظیم میکند.
- sndlowat=<bytes>
- حداقل تعداد بایتهای موجود در بافر ارسال را روی <bytes> [int] تعیین میکند تا لایه سوکت پس از آن اقدام به ارسال دادهها کند.
- protocol-family=<string>, pf=<string>
- عبارت pf مخفف protocol family (خانواده پروتکل) است، که گاهی دامنه ارتباطی (communication domain) یا خانواده آدرس (address family) نیز نامیده میشود. این گزینه استفاده از نسخه IP یا پروتکل مشخصشده را اجبار میکند. <string> میتواند یک عدد یا عبارتی مانند "ip4" (به معنای 2) یا "ip6" (به معنای 10) باشد. مقدار حاصل به عنوان نخستین آرگومان در فراخوانیهای socket() یا socketpair() و در فیلد ai_family در راهنماهای (hints) getaddrinfo() استفاده میشود. این گزینه بر تفکیک آدرس و ساختار نحوی مورد نیاز برای گزینههای bind و range تأثیر میگذارد.
- socktype=<type>
- نوع سوکت را، که به عنوان آرگومان دوم در فراخوانیهای socket() یا socketpair() مشخص میشود، روی <type> [int] تنظیم میکند. تفکیک آدرس تحت تأثیر این گزینه قرار نمیگیرد. در لینوکس، 1 به معنای سوکت مبتنی بر جریان (stream oriented)، 2 به معنای سوکت دادهگرام (datagram)، 3 به معنای سوکت خام (raw)، و 5 به معنای seqpacket (جریان با حفظ مرزهای بسته) است. دادهگرامها زمانی مفید هستند که بخواهید مرزهای بستهها حفظ شوند.
- protocol
- پروتکل سوکت را، که به عنوان آرگومان سوم در فراخوانیهای socket() یا socketpair() مشخص میشود، روی <protocol> [int] تنظیم میکند. تفکیک آدرس تحت تأثیر این گزینه قرار نمیگیرد. 6 به معنای TCP و 17 به معنای UDP است.
- reuseport
- گزینه سوکت SO_REUSEPORT را تنظیم میکند.
- so-timestamp
- گزینه سوکت SO_TIMESTAMP را تنظیم میکند. این کار دریافت و ثبت گزارش پیامهای کمکی برچسب زمانی را فعال میسازد.
- setsockopt=<level>:<optname>:<optval>
- تابع setsockopt() را برای سوکت با پارامترهای ارائهشده فراخوانی میکند. level [int] به عنوان آرگومان دوم setsockopt() استفاده میشود و لایه را مشخص میکند؛ مانند SOL_TCP برای TCP (مقدار 6 در لینوکس)، یا SOL_SOCKET برای لایه سوکت (مقدار 1 در لینوکس). optname [int] آرگومان سوم setsockopt() است و مشخص میکند که کدام گزینه سوکت باید تنظیم شود. برای اعداد واقعی ممکن است نیاز باشد فایلهای سرآیند (include files) مناسب سیستم خود را بررسی کنید. برای پارامترهای چهارم و پنجم setsockopt()، value [dalan] توالی اختیاری از بایتها را مشخص میکند که از طریق اشارهگر به تابع ارسال میشوند، همراه با پارامتر طول که بهطور خودکار استخراج میگردد.
- setsockopt-int=<level>:<optname>:<optval>
- مشابه setsockopt، اما <optval> یک اشارهگر به int [int] است.
- setsockopt-listen=<level>:<optname>:<optval>
- مشابه setsockopt، اما برای آدرسهای از نوع listen، به جای سوکت متصلشده به سوکت شنودکننده اعمال میشود.
- setsockopt-string=<level>:<optname>:<optval>
- مشابه setsockopt، اما <optval> یک رشته است. این رشته با نویسه تهی پایانی (trailing null character) به تابع ارسال میشود و پارامتر طول بهطور خودکار از دادهها به دست میآید.
- setsockopt-socket=<level>:<optname>:<optval>
- مشابه setsockopt، اما پیش از سایر عملیات ( bind() ، connect() ، accept() و ...) روی سوکت اعمال میشود.
- setsockopt-connected=<level>:<optname>:<optval>
- مشابه setsockopt، اما تنها زمانی اعمال میشود که سوکت توسط یک فراخوانی connect() یا listen() متصل شده باشد.
گروه گزینههای UNIX
این گزینهها برای آدرسهای مبتنی بر دامنه UNIX اعمال میشوند.
- bind-tempname[=/tmp/pre-XXXXXX],
- unix-bind-tempname[=/tmp/pre-XXXXXX]"
به یک مسیر
تصادفی یا
آدرس
تصادفی (در
سوکتهای
فضای نام
انتزاعی)
متصل (bind)
میشود. این
گزینه با
آدرسهای
کلاینت
دادهگرام
(SENDTO یا
CLIENT) که در
فرآیندهای
فرزندی
مشتقشده
از یک
فرآیند
والد مشترک
باز
میشوند و
نمیتوانند
گزینههای
bind متفاوتی
داشته
باشند،
مفید است.
در مسیر،
نویسههای
X با یک
توالی
تصادفی از
نویسهها
مشابه tempnam(3)
جایگزین
میشوند.
هنگامی که
آرگومانی
داده نشود،
socat یک مقدار
پیشفرض
مانند
/tmp/fileXXXXXX را در
نظر
میگیرد.
- unix-tightsocklen[=(0|1)]
- در عملیات سوکت، طولی از آدرس سوکت را ارسال میکند که شامل کل رکورد struct sockaddr_un نیست، بلکه (در کنار سایر مؤلفهها) فقط شامل بخش مربوط به نام فایل یا رشته انتزاعی است. پیشفرض 1 است.
گروههای گزینههای IP4 و IP6
این گزینهها میتوانند با سوکتهای مبتنی بر IPv4 و IPv6 استفاده شوند.
- tos=<tos>
- فیلد TOS (نوع سرویس) بستههای خروجی را روی <tos> [byte] تنظیم میکند (به RFC 791 مراجعه کنید).
- ttl=<ttl>
- فیلد TTL (طول عمر) بستههای خروجی را روی <ttl> [byte] تنظیم میکند.
- ip-options=<data>
- گزینههای
IP مانند
مسیریابی
مبدأ (source routing) را
تنظیم
میکند.
باید در
قالب
دودویی
ارائه شود؛
قالب
توصیهشده
یک "x" در
ابتدا و به
دنبال آن
تعداد زوجی
از ارقام
هگزادسیمال
است. این
گزینه
میتواند
چندین بار
استفاده
شود و
دادهها به
انتها
الحاق
میشوند. به
عنوان
مثال، برای
اتصال به
میزبان 10.0.0.1 از
طریق یک gateway با
استفاده از
مسیر مبدأ
آزاد (loose source route)،
از gateway به
عنوان
پارامتر
آدرس
استفاده
کنید و با
استفاده از
گزینه
ip-options=x8307040a000001 یک
مسیر مبدأ
آزاد تنظیم
نمایید.
گزینههای IP در RFC 791 تعریف شدهاند. برای هرگز، در صورت تمایل، یا همیشه استفاده کردن از کشف MTU مسیر (path MTU discovery) روی سوکت IPv4، مقادیر 0، 1 یا 2 را میپذیرد. - ip-pktinfo
- گزینه سوکت IP_PKTINFO را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی (ancillary messages) شامل نشانی مقصد و رابط شبکه را فعال میسازد (Linux) (نمونه).
- ip-recverr
- گزینه سوکت IP_RECVERR را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی شامل اطلاعات تفصیلی خطا را فعال میسازد.
- ip-recvopts
- گزینه سوکت IP_RECVOPTS را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی گزینههای IP را فعال میسازد (Linux، *BSD).
- ip-recvtos
- گزینه سوکت IP_RECVTOS را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی TOS (نوع سرویس) را فعال میسازد (Linux).
- ip-recvttl
- گزینه سوکت IP_RECVTTL را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی TTL (طول عمر) را فعال میسازد (Linux، *BSD).
- ip-recvdstaddr
- گزینه سوکت IP_RECVDSTADDR را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی شامل نشانی مقصد را فعال میسازد (*BSD) (نمونه).
- ip-recvif
- گزینه سوکت IP_RECVIF را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی رابط شبکه را فعال میسازد (*BSD) (نمونه).
- ip-add-membership=<multicast-address:interface-address>
- ip-add-membership=<multicast-address:interface-name>
- ip-add-membership=<multicast-address:interface-index>
- ip-add-membership=<multicast-address:interface-address:interface-name>
- ip-add-membership=<multicast-address:interface-address:interface-index>
- سوکت را عضو
گروه
چندپخشی (multicast)
مشخصشده
میکند. این
فقط برای IPv4
کار
میکند،
برای گونه IPv6
گزینه ipv6-join-group را
ببینید. این
گزینه
نشانی IP
گروه
چندپخشی و
اطلاعات
مربوط به
رابط شبکه
موردنظر را
دریافت
میکند.
رایجترین
نحو همان
حالت اول
است، در
حالی که
حالتهای
دیگر تنها
روی
سیستمهایی
که struct mreqn را
فراهم
میکنند در
دسترس
هستند (Linux).
اندیسهای رابطهای شبکه فعال را میتوان با استفاده از ابزار کاربردی procan مشاهده کرد. - ip-add-source-membership=<multicast-address:interface-address:source-address>
- سوکت را برای مبدأ مشخصشده، عضو گروه چندپخشی مشخصشده میکند؛ یعنی فقط ترافیک چندپخشی از این نشانی تحویل داده میشود. این فقط برای IPv4 کار میکند، برای گونه IPv6 گزینه ipv6-join-source-group را ببینید. این گزینه نشانی IP گروه چندپخشی، نشانی IP رابط شبکه موردنظر و نشانی IP مبدأ ترافیک چندپخشی را دریافت میکند.
- ipv6-join-group=<multicast-address:interface-name>
- ipv6-join-group=<multicast-address:interface-index>
- سوکت را عضو گروه چندپخشی مشخصشده میکند. این فقط برای IPv6 کار میکند، برای گونه IPv4 گزینه ip-add-membership را ببینید. این گزینه نشانی IP گروه چندپخشی و اطلاعات مربوط به رابط شبکه موردنظر را دریافت میکند. اندیسهای رابطهای شبکه فعال را میتوان با استفاده از ابزار کاربردی procan مشاهده کرد.
- ipv6-join-source-group=<multicast-address:interface-name:source-address>
- ipv6-join-source-group=<multicast-address:interface-index:source-address>
- سوکت را
برای مبدأ
مشخصشده،
عضو گروه
چندپخشی
مشخصشده
میکند؛
یعنی فقط
ترافیک
چندپخشی از
این نشانی
تحویل داده
میشود. این
فقط برای IPv6
کار
میکند،
برای گونه IPv4
گزینه ip-add-source-membership
را ببینید.
این گزینه
نشانی IP
گروه
چندپخشی،
اطلاعات
مربوط به
رابط شبکه
موردنظر و
نشانی IP
مبدأ
ترافیک
چندپخشی را
دریافت
میکند.
اندیسهای
رابطهای
شبکه فعال
را میتوان
با استفاده
از ابزار
کاربردی procan
مشاهده کرد.
- ip-multicast-if=<hostname>
- نام میزبان یا نشانی رابط شبکهای که باید برای ترافیک چندپخشی استفاده شود را مشخص میکند.
- ip-multicast-loop[=<bool>], mcloop[=<bool>]
- مشخص میکند که آیا ترافیک چندپخشی خروجی باید به همان رابط شبکه نیز بازگردانده (loop back) شود یا خیر.
- ip-multicast-ttl=<byte>
- مقدار TTL مورد استفاده برای ترافیک چندپخشی خروجی را تعیین میکند. پیشفرض 1 است.
- ip-transparent
- گزینه سوکت IP_TRANSPARENT را تنظیم میکند. این گزینه ممکن است به دسترسی ریشه (root) نیاز داشته باشد.
گزینههای تحلیلگر نام (Resolver options)
این گزینهها رفتار تفکیک و تحلیل نام میزبان را موقتاً تغییر میدهند. گزینههای به فرم ai-* روی رفتار تابع getaddrinfo() اثر میگذارند که شامل جستجوهای مبتنی بر /etc/hosts و NIS میشود.
گزینههای به فرم res-* تنها بر جستجوهای DNS اثر میگذارند، آن هم فقط زمانی که نتیجه در nscd ذخیره موقت (کَش) نشده باشد. این گزینهها ممکن است روی همه سیستمعاملها یا پیادهسازیهای libc کار نکنند.
- ai-addrconfig[=0|1]
- addrconfig[=0|1]
- پرچم AI_ADDRCONFIG را تنظیم یا لغو میکند تا از تحلیل نام به خانوادههای نشانی که روی رایانه در دسترس نیستند (مانند IPv6) جلوگیری شود. در صورتی که تحلیلگر نام راهنمایی درباره خانواده نشانی از آدرس Socat یا مقادیر پیشفرض دریافت نکند، مقدار پیشفرض 1 است.
- ai-passive[=0|1]
- passive[=0|1]
- پرچم AI_PASSIVE را برای فراخوانیهای getaddrinfo() تنظیم یا لغو میکند. مقدار پیشفرض برای آدرسهای نوع LISTEN، RECV و RECVFROM و همچنین با گزینه bind برابر با 1 است.
- ai-v4mapped[=0|1]
- v4mapped[=0|1]
- پرچم AI_V4MAPPED را برای getaddrinfo() تنظیم یا لغو میکند. همراه با آدرسهای socat که به نشانیهای IPv6 نیاز دارند، این کار نشانیهای IPv4 را به نشانی IPv6 متناظر [::ffff:*:*] نگاشت و تحلیل میکند. برای آدرسهای IPv6 در socat، پیشفرض 1 است.
- ai-all[=0|1]
- پرچم AI_ALL را برای getaddrinfo() تنظیم یا لغو میکند.
- res-debug
- res-aaonly
- res-usevc
- res-primary
- res-igntc
- res-recurse
- res-defnames
- res-stayopen
- res-dnsrch
- این
گزینهها
پرچمهای
گزینشی
متناظر
تحلیلگر
نام (resolver) را
تنظیم
میکنند.
برای لغو
کردن یک
گزینه
پیشفرض،
عبارت "=0" را
اضافه کنید.
برای
اطلاعات
بیشتر
درباره این
گزینهها man
resolver(5) را
ببینید. Socat
مقادیر
قدیمی را پس
از اتمام
فاز باز
کردن آدرس
بازیابی
میکند،
بنابراین
این
گزینهها
صرفاً برای
همان آدرسی
که رویشان
اعمال
شدهاند
معتبر
هستند.
لطفاً توجه داشته باشید که این پرچمها فقط بر تحلیل نام DNS اثر میگذارند و نه تحلیلهای مبتنی بر hosts یا NIS، و در حالتی که (g)libc نتایج را از nscd دریافت میکند نیز هیچ تأثیری ندارند. - res-retrans=<int>
- فاصله زمانی ارسال مجدد (retransmission) تحلیلگر DNS را تنظیم میکند (بر اساس یک قابلیت مستندنشده).
- res-retry=<int>
- تعداد دفعات ارسال مجدد تحلیلگر DNS را تنظیم میکند (بر اساس یک قابلیت مستندنشده).
- res-nsaddr=<ipaddr>[:<port>]
- تلاش میکند تا با نوشتن نشانی IPv4 دادهشده در فیلد مستندنشده _res:nsaddr_list[0] تنظیمات کارساز نام (nameserver) بارگذاریشده از /etc/resolv.conf را بازنویسی کند. فایل /etc/hosts همچنان توسط تحلیلگر نام بررسی میشود. لطفاً توجه داشته باشید هنگامی که nscd مربوط به glibc’s در حال اجرا باشد، همیشه ابتدا از آن پرسوجو میشود!
گروه گزینههای IP6 (IP6 option group)
این گزینهها فقط میتوانند روی سوکتهای مبتنی بر IPv6 استفاده شوند. برای گزینههایی که میتوانند روی هر دو نوع سوکت IPv4 و IPv6 اعمال شوند، گزینههای IP را ببینید.
- ipv6only[=<bool>]
- گزینه سوکت IPV6_V6ONLY را تنظیم میکند. اگر 0 باشد، پشته TCP اتصالات استفادهکننده از پروتکل IPv4 را نیز روی همان پورت خواهد پذیرفت. پیشفرض وابسته به سیستم است.
- ipv6-recvdstopts
- گزینه سوکت IPV6_RECVDSTOPTS را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی شامل گزینههای مقصد را فعال میسازد..IP "ipv6-recvhoplimit" گزینه سوکت IPV6_RECVHOPLIMIT را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی حاوی hoplimit را فعال میکند.
- ipv6-recvhopopts
- گزینه سوکت IPV6_RECVHOPOPTS را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی حاوی گزینههای جهش (hop options) را فعال میکند.
- ipv6-recvpktinfo
- گزینه سوکت IPV6_RECVPKTINFO را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی حاوی نشانی مقصد و رابط شبکه را فعال میکند.
- ipv6-unicast-hops=link(TYPE_INT)(<int>)
- گزینه سوکت IPV6_UNICAST_HOPS را تنظیم میکند. این گزینه حد تعداد جهش (TTL) را برای بستههای تکپخشی (unicast) خروجی تعیین میکند.
- ipv6-recvrthdr
- گزینه سوکت IPV6_RECVRTHDR را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی حاوی اطلاعات مسیریابی را فعال میکند.
- ipv6-tclass
- گزینه سوکت IPV6_TCLASS را تنظیم میکند. این گزینه کلاس انتقال بستههای خروجی را تعیین میکند.
- ipv6-recvtclass
- گزینه سوکت IPV6_RECVTCLASS را تنظیم میکند. این گزینه دریافت و ثبت پیامهای کمکی حاوی کلاس انتقال را فعال میکند.
- ipv6-multicast-loop[=<bool>], mcloop6[=<bool>]
- مشخص میکند که آیا ترافیک چندپخشی (multicast) خروجی باید به همان رابط شبکه نیز بازگردد (loop back) یا خیر.
- ipv6-mtu-discover=<0|1|2>, mtudiscover6=<0|1|2>
- مقادیر 0، 1 یا 2 را میپذیرد تا کشف path MTU را روی سوکت IPv6 بهترتیب به حالتهای هرگز (never)، در صورت تمایل (want) یا همیشه (always) تنظیم کند.
گروه گزینههای TCP
این گزینهها ممکن است برای سوکتهای TCP اعمال شوند. نحوه کار آنها با فراخوانی setsockopt() به همراه پارامترهای مناسب است.
- cork
- بستههای کوچکتر از MSS (حداکثر اندازه قطعه) را ارسال نمیکند.
- defer-accept
- در حین شنود، اتصالها را تنها زمانی میپذیرد که دادهای از طرف مقابل (peer) رسیده باشد.
- keepcnt=<count>
- تعداد پیامهای keepalive را پیش از بستن سوکت روی <count> [int] تنظیم میکند.
- keepidle=<seconds>
- زمان بیکاری پیش از ارسال اولین پیام keepalive را بر حسب ثانیه روی <seconds> [int] تنظیم میکند.
- keepintvl=<seconds>
- فاصله زمانی بین دو پیام keepalive را بر حسب ثانیه روی <seconds> [int] تنظیم میکند.
- linger2=<seconds>
- مدت زمانی که سوکت باید در وضعیت FIN-WAIT-2 بماند را بر حسب ثانیه روی <seconds> [int] تنظیم میکند.
- mss=<bytes>
- مقدار MSS (حداکثر اندازه قطعه) را پس از فراخوانی socket() بر حسب بایت روی <bytes> [int] تنظیم میکند. این مقدار سپس همراه با بسته SYN یا SYN/ACK به طرف مقابل پیشنهاد داده میشود (مثال).
- mss-late=<bytes>
- مقدار MSS سوکت را پس از برقراری اتصال بر حسب بایت روی <bytes> [int] تنظیم میکند.
- nodelay
- الگوریتم Nagle را برای سنجش RTT (زمان رفت و برگشت) غیرفعال میکند.
- rfc1323
- گزینههای TCP استاندارد RFC1323 را فعال میکند: مقیاس پنجره TCP، اندازهگیری زمان رفت و برگشت (RTTM) و محافظت در برابر شماره توالیهای دورزده (PAWS) (مخصوص AIX).
- stdurg
- مدیریت اشارهگر اضطراری (urgent pointer) سازگار با RFC1122 را فعال میکند (مخصوص AIX).
- syncnt=<count>
- حداکثر تعداد ارسال مجدد SYN در طول برقراری اتصال را روی <count> [int] تنظیم میکند.
- md5sig
- تولید خلاصه MD5 روی بستهها را فعال میکند (مخصوص FreeBSD).
- noopt
- استفاده از گزینههای TCP را غیرفعال میکند (مخصوص FreeBSD و MacOSX).
- nopush
- گزینه سوکت TCP_NOPUSH را تنظیم میکند (مخصوص FreeBSD و MacOSX).
- sack-disable
- استفاده از قابلیت تصدیق انتخابی (selective acknowledge) را غیرفعال میکند (مخصوص OpenBSD).
- signature-enable
- تولید خلاصه MD5 روی بستهها را فعال میکند (مخصوص OpenBSD).
- abort-threshold=<milliseconds>
- مدت زمان انتظار برای پاسخ از طرف مقابل روی یک اتصال برقرار شده را بر حسب میلیثانیه تنظیم میکند (مخصوص HP-UX).
- conn-abort-threshold=<milliseconds>
- مدت زمان انتظار برای پاسخ از سرور هنگام برقراری اتصال اولیه را بر حسب میلیثانیه تنظیم میکند (مخصوص HP-UX).
- keepinit
- مدت زمان انتظار برای پاسخ از سرور را هنگام فراخوانی connect() پیش از صرفنظر کردن تنظیم میکند. مقدار بر حسب نیمثانیه است، پیشفرض ۱۵۰ (۷۵ ثانیه) است (مخصوص Tru64).
- paws
- قابلیت "محافظت در برابر شماره توالیهای دورزده" را فعال میکند (مخصوص Tru64).
- sackena
- تصدیق انتخابی (selective acknowledge) را فعال میکند (مخصوص Tru64).
- tsoptena
- گزینه برچسب زمانی (time stamp) را که امکان محاسبه مجدد RTT را روی اتصالهای موجود فراهم میکند، فعال میسازد (مخصوص Tru64).
گروه گزینههای UDP
این گزینه ممکن است برای سوکتهای دیتاگرام UDP اعمال شود.
- udp-ignore-peerport>
- نشانی UDP-DATAGRAM انتظار دارد که پاسخهای ورودی از پورتی که در پارامتر دوم آن مشخص شده است دریافت شوند. با این گزینه، بستههای ورودی از هر پورتی پذیرفته میشوند.
گروه گزینههای UDPLITE
این گزینهها ممکن است برای نشانیهای UDPLITE اعمال شوند:
- udplite-send-cscov
- تعداد بایتهایی را که مجموع مقابلهای (checksum) برای آنها محاسبه و ارسال میشود ("پوشش مجموع مقابلهای") تنظیم میکند.
- udplite-recv-cscov
- تعداد بایتهایی را که مجموع مقابلهای (checksum) برای آنها بررسی میشود ("پوشش مجموع مقابلهای") تنظیم میکند.
گروه گزینههای SCTP
این گزینهها ممکن است برای سوکتهای جریانی (stream) پروتکل SCTP اعمال شوند.
- sctp-nodelay
- گزینه سوکت SCTP_NODELAY را تنظیم میکند که الگوریتم Nagle را غیرفعال میسازد.
- sctp-maxseg=<bytes>
- گزینه سوکت SCTP_MAXSEG را روی <bytes> [int] تنظیم میکند. این مقدار سپس همراه با بسته SYN یا SYN/ACK به طرف مقابل پیشنهاد داده میشود.
گروه گزینههای DCCP
این گزینهها ممکن است برای سوکتهای DCCP اعمال شوند.
- dccp-set-ccid=<int>
- ccid=<int>
- سازوکار کنترل ازدحام (CCID) مورد نظر را انتخاب میکند.
گروه گزینههای UDP، TCP، SCTP، DCCP و UDPLITE
در اینجا گزینههایی قرار دارند که به سازوکار پورت شبکه مرتبط هستند و بنابراین میتوان از آنها با نشانیهای کلاینت و سرور پروتکلهای UDP، TCP، SCTP، DCCP و UDP-Lite استفاده کرد.
- sourceport=<port>
- برای اتصالهای خروجی (کلاینت)، پورت مبدأ <port> را با استفاده از یک فراخوانی اضافی bind() تنظیم میکند. در نشانیهای شنود TCP یا UDP، اگر کلاینت از این sourceport استفاده نکند، socat بلافاصله اتصال را میبندد. نشانیهای UDP-RECV، UDP-RECVFROM، UDP-SENDTO و UDP-DATAGRAM در صورت عدم تطابق، بسته را نادیده میگیرند (مثال).
- lowport
- اتصالهای خروجی (کلاینت) با این گزینه، از یک پورت مبدأ تصادفیِ آزاد بین ۶۴۰ تا ۱۰۲۳ (شامل هر دو) استفاده میکنند. در سیستمعاملهای رده UNIX، این کار نیازمند دسترسی ریشه (root) است و بنابراین نشان میدهد که فرایند کلاینت توسط ریشه محلی مجاز شناخته شده است. نشانیهای شنود TCP و UDP با این گزینه، در صورتی که کلاینت از sourceport کمتر یا مساوی ۱۰۲۳ استفاده نکند، اتصال را بلافاصله قطع میکنند. این سازوکار میتواند در برخی شرایط، یک سطح دسترسی یا اعتبارسنجی محدود فراهم کند.
گروه گزینههای SOCKS
هنگام استفاده از آدرسهای نوع SOCKS، میتوان برخی گزینههای خاص socks را تنظیم کرد.
- socksport=<tcp service>
- سرویس یا پورت پیشفرض "socks" یعنی پورت 1080 برای پورت سرور socks را با <TCP service> جایگزین میکند.
- socksuser=<user>
- مقدار <user> [رشته] را در فیلد نام کاربری به سرور socks ارسال میکند. پیشفرض، نام کاربری واقعی ($LOGNAME یا $USER) است (نمونه).
- sockspass=<string>
- گذرواژه ارائهشده [رشته] را هنگام احراز هویت نام کاربری،گذرواژه به سرور socks5 ارسال میکند.
گروه گزینههای HTTP
گزینههایی که میتوان با آدرسهای نوع HTTP ارائه داد. در حال حاضر تنها آدرس HTTP پیادهسازیشده proxy-connect است.
- http-version=<string>
- مقدار پیشفرض "1.0" را که در درخواست اولیه HTTP به سرور ارسال میشود تغییر میدهد. در حال حاضر هیچ تأثیر دیگری ندارد؛ بهویژه هیچ راهکاری برای ارسال هدر Host فراهم نمیکند.
- proxyport=<TCP service>
- پورت پیشفرض پراکسی HTTP یعنی 8080 را با <TCP service> جایگزین میکند.
- ignorecr
- پروتکل HTTP نیازمند استفاده از CR+NL به عنوان پایاندهنده خط است. هنگامی که یک سرور پراکسی این استاندارد را نقض کند، ممکن است socat متوجه پاسخ آن نشود. این گزینه به socat دستور میدهد NL را به عنوان پایاندهنده خط تفسیر کرده و از CR در پاسخ چشمپوشی کند. با این وجود، socat همچنان CR+NL را به پراکسی ارسال میکند.
- proxy-authorization=<username>:<password>
- احراز هویت
"basic" را به
سرور
پراکسی
ارائه
میدهد.
آرگومانِ
گزینه با یک
هدر "Proxy-Authorization: Basic"
در قالب
کدگذاریشده
با base64
استفاده
میشود.
نکته: نام کاربری و گذرواژه برای هر کاربری روی ماشین محلی در فهرست فرایندها قابل مشاهده است؛ نام کاربری و گذرواژه بدون رمزنگاری (کدگذاریشده با base64) به سرور پراکسی منتقل میشوند و ممکن است شنود شوند. - proxy-authorization-file=<filename>
- مشابه
گزینه proxy-authorization
است، اما
اعتبارسنجیها
از فایل
خوانده
میشوند و
بنابراین
در فهرست
فرایندها
قابل
مشاهده
نیستند.
- resolve
- بهطور پیشفرض، socat درخواستی از نوع CONNECT حاوی نام میزبان مقصد را به پراکسی ارسال میکند. با این گزینه، socat نام میزبان را به صورت محلی برطرف کرده و نشانی IP را ارسال میکند. لطفاً توجه داشته باشید که طبق RFC 2396، تنها تفکیک نام به نشانیهای IPv4 پیادهسازی شده است.
گروه گزینههای RANGE
این گزینهها بررسی میکنند که آیا کلاینت متصلشونده باید اجازه دسترسی داشته باشد یا خیر. آنها را میتوان برای سوکتهای شبکه شنودکننده و دریافتکننده اعمال کرد. گزینههای tcp-wrappers نیز در این گروه قرار میگیرند.
- range=<address-range>
- پس از پذیرش یک اتصال، بررسی میکند که آیا همتا در محدوده range قرار دارد یا خیر. برای نشانیهای IPv4، مقدار address-range قالب address/bits (برای نمونه 10.0.0.0/8) یا address:mask (برای نمونه 10.0.0.0:255.0.0.0) را میگیرد (نمونه)؛ برای IPv6، به صورت [ip6-address]/bits است (برای نمونه [::1]/128). اگر نشانی کلاینت مطابقت نداشته باشد، socat تلاش برای اتصال را رد کرده، هشداری صادر میکند و به شنود/دریافت ادامه میدهد.
- tcpwrap[=<name>]
- از کتابخانه libwrap (tcpd) اثر Wietse Venema استفاده میکند تا تعیین کند آیا کلاینت مجاز به اتصال است یا خیر. فایلهای پیکربندی بهطور پیشفرض /etc/hosts.allow و /etc/hosts.deny هستند؛ برای اطلاعات بیشتر "man 5 hosts_access" را ببینید. مقدار اختیاری <name> (از نوع رشته) به عنوان نام فرایند دیمون به توابع wrapper ارسال میشود (نمونه). در صورت حذف، نام پایه فراخوانی socat یعنی (argv[0]) ارسال میشود. اگر هر دو گزینه tcpwrap و range برای یک آدرس اعمال شوند، برای اجازه اتصال باید هر دو شرط برآورده شوند.
- allow-table=<filename>
- به جای /etc/hosts.allow فایل مشخصشده را در نظر میگیرد.
- deny-table=<filename>
- به جای /etc/hosts.deny فایل مشخصشده را در نظر میگیرد.
- tcpwrap-etc=<directoryname>
- به دنبال hosts.allow و hosts.deny در دایرکتوری مشخصشده میگردد. توسط گزینههای hosts-allow و hosts-deny نادیده گرفته میشود.
گروه گزینههای LISTEN
گزینههای مختص سوکتهای شنودکننده.
- backlog=<count>
- مقدار backlog ارسالشده با فراخوان سیستمی listen() را روی <count> [int] تنظیم میکند. پیشفرض 5 است.
- accept-timeout=<seconds>
- انتظار برای یک اتصال را پس از <seconds> [timeval] با وضعیت خطا پایان میدهد.
گروه گزینههای CHILD
آدرسهای نوع LISTEN و CONNECT گزینه fork را برای مدیریت چندین اتصال از طریق فرایندهای فرزند میپذیرند.
- fork
- پس از
برقراری یک
اتصال،
کانال آن را
در یک
فرایند
فرزند
مدیریت
کرده و
فرایند
والد را در
حال تلاش
برای ایجاد
اتصالات
بیشتر، چه
از طریق
شنود یا از
طریق اتصال
در یک حلقه،
نگه
میدارد
(نمونه).
گزینههای OPENSSL-CONNECT و OPENSSL-LISTEN در زمانی که فرزند را منشعب (fork) میکنند با یکدیگر تفاوت دارند: OPENSSL-LISTEN عمل fork را پیش از دستتکانی SSL انجام میدهد، در حالی که OPENSSL-CONNECT عمل fork را پس از آن انجام میدهد. گزینههای retry و forever توسط فرایند فرزند به ارث برده نمیشوند.
روی برخی سیستمعاملها (برای نمونه FreeBSD) این گزینه برای آدرسهای UDP-LISTEN کار نمیکند.
- max-children=<count>
- تعداد فرایندهای فرزند همروند [int] را محدود میکند. پیشفرض نامحدود است.
- children-shutup[=1|2|..]
- سطح اهمیت
پیامهای
لاگ
تولیدشده
توسط
فرایندهای
فرزند را
کاهش
میدهد.
برای
نمونه، با
مقدار 1
اعلانها (notices)
به عنوان info
ثبت
میشوند (یا
بسته به
گزینه -dX دور
ریخته
میشوند)، و
خطاها به
عنوان
هشدار ثبت
میشوند
اما همچنان
موجب خاتمه
فرایند
فرزند
میگردند.
این گزینه برای کاهش لاگاندازی سرورها یا پراکسیهای با بار کاری بالا در نظر گرفته شده است.
این گزینه جایگزین گزینه cool-write میشود.
گروه گزینههای EXEC
گزینههایی برای آدرسهایی که یک برنامه را فراخوانی میکنند.
- path=<string>
- متغیر محیطی PATH را برای جستجوی برنامه با <string> جایگزین میکند. این مقدار $PATH در فرایند فرزند نیز مؤثر است.
- login
- مقدار argv[0] را برای فراخوانی execvp() با ’-’ پیشوندگذاری میکند، و بدین ترتیب باعث میشود پوسته رفتاری شبیه به پوسته ورود (login shell) داشته باشد.
گروه گزینههای FORK
آدرسهای EXEC یا SYSTEM با استفاده از یک فرایند فرزند برنامهای را فراخوانی کرده و دادهها را بین socat و برنامه منتقل میکنند. سازوکار ارتباط بینفرایندی را میتوان با گزینههای زیر تغییر داد. بهطور پیشفرض، یک socketpair() ایجاد شده و به stdin و stdout فرایند فرزند اختصاص مییابد، در حالی که stderr از فرایند socat به ارث برده میشود، و فرایند فرزند از توصیفگرهای فایل 0 و 1 برای برقراری ارتباط با فرایند اصلی socat استفاده میکند.
- nofork
- برای اجرای برنامه زیرفرایندی را fork نمیکند؛ در عوض execvp() یا system() را مستقیماً از نمونه فعلی socat فراخوانی میکند. این کار از بار اضافی یک فرایند دیگر بین برنامه و همتای آن جلوگیری میکند، اما محدودیتهای بسیاری به همراه دارد:
- o
- این گزینه تنها میتواند برای دومین آدرس socat اعمال شود..IP o نمیتواند بر بخشی از یک آدرس دوگانه (dual address) اعمال شود.
- o
- آدرس نخست socat نمیتواند OPENSSL یا READLINE باشد.
- o
- گزینههای -b، -t، -D، -l، -v و -x در socat بیاثر میشوند.
- o
- برای هر دو آدرس، گزینههای ignoreeof، cr و crnl بیاثر میشوند.
- o
- برای هر دو آدرس، مدیریت خاتمه/بستن مختص آدرس (مانند بستن ملایم سوکت - graceful socket shutdown) و گزینههای مربوطه بیاثر میشوند.
- o
- برای آدرس دوم (آدرسی که دارای گزینه nofork است)، گزینههای append، cloexec، flock، user، group، mode، nonblock، perm-late، setlk و setpgid قابل اعمال نیستند. با این حال برخی از اینها ممکن است در آدرس نخست قابل استفاده باشند.
- pipes
- به جای یک جفت سوکت، یک جفت لوله (pipe) بینام برای ارتباط بینفرایندی ایجاد میکند.
- openpty
- به جای حالت پیشفرض (socketpair یا ptmx)، با استفاده از یک شبهترمینال ایجادشده توسط openpty() با زیرفرایند ارتباط برقرار میکند.
- ptmx
- به جای حالت پیشفرض (socketpair)، با استفاده از یک شبهترمینال ایجادشده از طریق باز کردن /dev/ptmx یا /dev/ptc با زیرفرایند ارتباط برقرار میکند.
- pty
- به جای یک جفت سوکت، با استفاده از یک شبهترمینال با زیرفرایند ارتباط برقرار میکند. شبهترمینال (pty) را با سازوکارهای موجود ایجاد میکند. اگر هر دو سازوکار openpty و ptmx موجود باشند، از ptmx استفاده میکند زیرا با استاندارد POSIX سازگار است (مثال).
- ctty
- شبهترمینال (pty) را به tty کنترلی زیرفرایند تبدیل میکند (مثال).
- stderr
- با ایجاد یک dup() از stdout برای stderr، خروجی خطای استاندارد (stderr) زیرفرایند را به کانال خروجی آن هدایت میکند (مثال).
- fdin=<fdnum>
- کانال ورودی زیرفرایند را به جای stdin (0) به توصیفگر فایل (file descriptor) <fdnum> آن اختصاص میدهد. برنامهای که از زیرفرایند اجرا میشود باید از این fd برای خواندن دادهها از socat استفاده کند (مثال).
- fdout=<fdnum>
- کانال خروجی زیرفرایند را به جای stdout (1) به توصیفگر فایل <fdnum> آن اختصاص میدهد. برنامهای که از زیرفرایند اجرا میشود باید از این fd برای نوشتن دادهها در socat استفاده کند (مثال).
- sighup, sigint, sigquit
- باعث میشود socat سیگنالهایی از این نوع را به زیرفرایند ارسال کند. اگر هیچ آدرسی این گزینه را نداشته باشد، socat با دریافت این سیگنالها خاتمه مییابد.
گزینهها برای آدرس SHELL
- shell=<filename>
- استفاده از شل پیشفرض را با فایل اجرایی مشخصشده، مانند /bin/dash، جایگزین میکند. همچنین متغیر محیطی SHELL را مقداردهی میکند.
گروه گزینههای TERMIOS
برای آدرسهایی که روی یک tty کار میکنند (مانند stdio، file:/dev/tty، exec:...، pty)، پارامترهای ترمینال تعریفشده در سازوکار termios یونیکس به عنوان پارامترهای گزینه آدرس در دسترس قرار میگیرند. لطفاً توجه داشته باشید که تغییرات در پارامترهای ترمینال تعاملی شما پس از خاتمهٔ socat نیز پابرجا میمانند، بنابراین ممکن است لازم باشد پس از آن دستور "reset" یا "stty sane" را در شل خود وارد کنید. برای آدرسهای EXEC و SYSTEM به همراه گزینه PTY، این گزینهها توسط فرایندهای فرزند بر روی pty اعمال میشوند.
- b0
- اتصال ترمینال را قطع میکند.
- b19200
- سرعت خط
سریال را
روی 19200 باود (baud)
تنظیم
میکند.
نرخهای
دیگر نیز
ممکن
هستند؛ از
دستوری
شبیه به socat
-hh |grep ’ b[1-9]’ برای
یافتن تمام
سرعتهای
پشتیبانیشده
توسط
پیادهسازی
خود
استفاده
کنید.
نکته: در برخی از سیستمعاملها، این گزینهها ممکن است در دسترس نباشند. در عوض از ispeed یا ospeed استفاده کنید. - echo[=<bool>]
- انعکاس محلی (local echo) را فعال یا غیرفعال میکند.
- icanon[=<bool>]
- حالت متعارف (canonical mode) را تنظیم یا پاک میکند و میانگیری خطی (line buffering) و برخی نویسههای ویژه را فعال میسازد.
- raw
- حالت خام (raw mode) را تنظیم میکند، که باعث میشود ورودی و خروجی تقریباً بدون پردازش عبور داده شوند. این گزینه منسوخ شده است؛ در عوض از گزینه rawer یا cfmakeraw استفاده کنید.
- rawer
- ترمینال را از گزینه raw نیز خامتر میکند. این گزینه به طور ضمنی echo را غیرفعال میکند. (مثال).
- cfmakeraw
- با فراخوانی cfmakeraw() یا با شبیهسازی این فراخوانی، حالت خام را تنظیم میکند. این گزینه به طور ضمنی echo را غیرفعال میکند.
- ignbrk[=<bool>]
- نویسه BREAK (مانند ^C) را نادیده میگیرد یا تفسیر میکند.
- brkint[=<bool>]
- bs0
- bs1
- bsdly=<0|1>
- clocal[=<bool>]
cr0 cr1 cr2 cr3
- تاخیر بازگشت مکاننما (carriage return) را به ترتیب روی 0، 1، 2 یا 3 تنظیم میکند. 0 به معنای عدم تاخیر است، سایر مقادیر وابسته به ترمینال هستند.
- crdly=<0|1|2|3>
- cread[=<bool>]
- crtscts[=<bool>]
cs5 cs6 cs7 cs8
- اندازه نویسه (character size) را به ترتیب روی 5، 6، 7 یا 8 بیت تنظیم میکند.
- csize=<0|1|2|3>
- cstopb[=<bool>]
- به جای یک بیت، دو بیت توقف (stop bit) تنظیم میکند.
- dsusp=<byte>
- مقدار نویسه VDSUSP را تنظیم میکند که فرایند پیشزمینه جاری را تعلیق کرده و شل را دوباره فعال میسازد (همه به جز لینوکس).
- echoctl[=<bool>]
- نویسههای کنترلی را در نماد کلاهدار (مانند ^A) منعکس میکند.
- echoe[=<bool>]
- echok[=<bool>]
- echoke[=<bool>]
- echonl[=<bool>]
- echoprt[=<bool>]
- eof=<byte>
- eol=<byte>
- eol2=<byte>
- erase=<byte>
- discard=<byte>
- ff0
- ff1
- ffdly[=<bool>]
- flusho[=<bool>]
- hupcl[=<bool>]
- icrnl[=<bool>]
- iexten[=<bool>]
- igncr[=<bool>]
- ignpar[=<bool>]
- imaxbel[=<bool>]
- inlcr[=<bool>]
- inpck[=<bool>]
- intr=<byte>
- isig[=<bool>]
- ispeed=<unsigned-int>
- نرخ باود (baud rate)
را برای
دادههای
ورودی روی
این خط
تنظیم
میکند.
همچنین ببینید: ospeed، b19200 - istrip[=<bool>]
- iuclc[=<bool>]
- ixany[=<bool>]
- ixoff[=<bool>]
- ixon[=<bool>]
- kill=<byte>
- lnext=<byte>
- min=<byte>
- nl0
- تاخیر خط جدید (newline) را روی 0 تنظیم میکند.
- nl1
- nldly[=<bool>]
- noflsh[=<bool>]
- ofdel[=<bool>]
- ofill[=<bool>]
- olcuc[=<bool>]
- onlcr[=<bool>]
- onlret[=<bool>]
- onocr[=<bool>]
- opost[=<bool>]
- پردازش خروجی را فعال یا غیرفعال میکند؛ برای نمونه، تبدیل NL به CR-NL.
- ospeed=<unsigned-int>
- نرخ باود (baud rate)
را برای
دادههای
خروجی روی
این خط
تنظیم
میکند.
همچنین ببینید: ispeed، b19200 - parenb[=<bool>]
- تولید پاریتی در خروجی و بررسی پاریتی برای ورودی را فعال میکند.
- parmrk[=<bool>]
- parodd[=<bool>]
- pendin[=<bool>]
- quit=<byte>
- reprint=<byte>
- sane
- ترمینال را به وضعیتی نزدیک به یک حالت پیشفرضِ مفید بازمیگرداند.
- start=<byte>
- stop=<byte>
- susp=<byte>
- swtc=<byte>
- tab0
- tab1
- tab2
- tab3
- tabdly=<unsigned-int>
- time=<byte>
- tostop[=<bool>]
- vt0
- vt1
- vtdly[=<bool>]
- werase=<byte>
- xcase[=<bool>]
- xtabs
- i-pop-all
- در UNIX System V STREAMS، تمام درایورها را از پشته حذف میکند.
- i-push=<string>
- در UNIX System V STREAMS، درایور (ماژول) با نام (رشته) دادهشده را روی پشته قرار میدهد (push میکند). برای نمونه، جهت اطمینان از اینکه یک دستگاه نویسهای در Solaris از termios و غیره پشتیبانی میکند، از گزینههای زیر استفاده کنید: i-pop-all,i-push=ptem,i-push=ldterm,i-push=ttcompat
- termios-setflags=<word>:<flags>, setflags=<word>:<flags>
- یک کلمه (word) از c_*flag در struct termios را روی مقدار دادهشده تنظیم میکند. کلمه 0 برابر c_iflag و کلمه 3 برابر c_lflag است.
گروه گزینههای PTY
این گزینهها برای استفاده با نوع آدرس pty در نظر گرفته شدهاند.
- link=<filename>
- یک پیوند نمادین ایجاد میکند که به شبهترمینال واقعی (pty) اشاره دارد. این امر ممکن است به حل این مشکل کمک کند که ptyها با نامهایی کموبیش غیرقابلپیشبینی ایجاد میشوند، که دسترسی مستقیم و خودکار به pty ایجادشده توسط socat را دشوار میسازد. با این گزینه، کاربر میتواند یک نقطهٔ "ثابت" در سلسلهمراتب فایل مشخص کند که به او در دسترسی به pty واقعی کمک کند (مثال). از نسخهٔ 1.4.3 برنامهٔ socat، این پیوند نمادین هنگام بسته شدن آدرس حذف میشود (اما گزینهٔ unlink-close را ببینید).
- wait-slave
- مرحلهٔ باز کردن را تا زمانی که فرآیندی سمت slave مربوط به pty را باز کند، مسدود میکند. معمولاً socat پس از ایجاد pty، با باز کردن آدرس بعدی یا ورود به حلقهٔ انتقال کار خود را ادامه میدهد. با گزینهٔ wait-slave، برنامهٔ socat پیش از ادامه، منتظر میماند تا فرآیندی سمت slave مربوط به pty را باز کند. این گزینه تنها زمانی کار میکند که سیستمعامل فراخوان سیستمی poll() را ارائه داده باشد. همچنین به یک رفتار مستندنشدهٔ ptyها وابسته است، بنابراین روی همهٔ سیستمهای عامل کار نمیکند. این قابلیت با موفقیت روی Linux، FreeBSD، NetBSD و روی Tru64 با openpty آزمایش شده است.
- pty-interval=<seconds>
- هنگامی که گزینهٔ wait-slave تنظیم شده باشد، socat بهطور دورهای وضعیت HUP را با استفاده از poll() بررسی میکند تا دریابد آیا سمت slave مربوط به pty باز شده است یا خیر. بازهٔ پیشفرض پولینگ (polling) برابر با 1s است. برای تغییر این مقدار از گزینهٔ pty-interval [timeval] استفاده کنید.
- sitout-eio=<timeval>
- برنامهٔ login در لینوکس، tty/pty خود را به دلایل امنیتی میبندد و دوباره باز میکند. در طول این مدت، سمت master مربوط به pty در عملیاتهای I/O خطای EIO دریافت کرده و ممکن است خاتمه یابد. با این گزینه، socat خطای EIO را برای مدتزمان مشخصشده تحمل میکند. لطفاً توجه داشته باشید که در این وضعیت، socat ترافیک را در هر دو جهت مسدود میکند، حتی زمانی که به این کانال مربوط نباشد.
- tiocswinsz=<col>:<row>, tiocswinsz=<col>:<row>
- اندازهٔ یک شبهترمینال را تنظیم میکند.
گروه گزینههای OPENSSL
این گزینهها برای انواع آدرس openssl و openssl-listen اعمال میشوند.
- cipher=<cipherlist>
- فهرست
رمزنگارههایی
(cipherها) را که
ممکن است
برای اتصال
استفاده
شوند مشخص
میکند.
برای
اطلاعات
تفصیلی
دربارهٔ
نحو،
مقادیر، و
پیشفرضِ
<cipherlist>، به
صفحهٔ
راهنمای
ciphers ، بخش
CIPHER LIST FORMAT مراجعه
کنید.
میتوان چندین رشتهٔ رمزنگاره را که با ’:’ از هم جدا شدهاند وارد کرد. برخی رشتههای رمزنگارهٔ ساده: - 3DES
- از مجموعه رمزنگاری با Triple DES استفاده میکند.
- MD5
- از مجموعه رمزنگاری با MD5 استفاده میکند.
- aNULL
- از مجموعه رمزنگاری بدون احراز اصالت استفاده میکند.
- NULL
- از رمزنگاری استفاده نمیکند.
- HIGH
- از مجموعه رمزنگاری با رمزنگاری "بالا" (high) استفاده میکند. توجه داشته باشید که طرف مقابل (peer) باید از ویژگی انتخابشده پشتیبانی کند، در غیر این صورت مذاکره شکست خواهد خورد.
- method=<ssl-method>
- این گزینه بر اساس توابع منسوخشده کار میکند و تنها زمانی در دسترس است که socat با گزینهٔ --with-openssl-method ساخته شده باشد. به جای آن از گزینهٔ min-proto-version و احتمالاً max-proto-version استفاده کنید. نسخهٔ پروتکل مورد استفاده را تنظیم میکند. رشتههای معتبر (بدون حساسیت به بزرگی و کوچکی حروف) عبارتند از:
- SSL2
- انتخاب نسخهٔ 2 پروتکل SSL.
- SSL3
- انتخاب نسخهٔ 3 پروتکل SSL.
- SSL23
- انتخاب بهترین پروتکل موجود SSL یا TLS.
- TLS1
- انتخاب نسخهٔ 1 پروتکل TLS.
- TLS1.1
- انتخاب نسخهٔ 1.1 پروتکل TLS.
- TLS1.2
- انتخاب نسخهٔ 1.2 پروتکل TLS. هنگامی که این گزینه ارائه نشود، OpenSSL روش را با همتای (peer) خود مذاکره میکند.
- openssl-min-proto-version=<string>, min-proto-version=<string>
- این گزینه به OpenSSL میگوید که از این نسخه یا نسخههای بالاتر پروتکل SSL/TLS استفاده کند و از پذیرش پروتکل پایینتر/قدیمیتر خودداری نماید. نحو معتبر عبارت است از:
- SSL2
- انتخاب نسخهٔ 2 پروتکل SSL.
- SSL3
- انتخاب نسخهٔ 3 پروتکل SSL.
- TLS1
- TLS1.0
- انتخاب نسخهٔ 1 پروتکل TLS.
- TLS1.1
- انتخاب نسخهٔ 1.1 پروتکل TLS.
- TLS1.2
- انتخاب نسخهٔ 1.2 پروتکل TLS.
- TLS1.3
- انتخاب نسخهٔ 1.3 پروتکل TLS.
- openssl-max-proto-version=<string>, max-proto-version=<string>
- این گزینه مشابه min-proto-version است، با این حال، استفاده از نسخهٔ پروتکل بالاتر را مجاز نمیداند. برای آزمایش همتا (peer) مفید است.
- verify[=<bool>]
- بررسی گواهی همتا (peer) را کنترل میکند. مقدار پیشفرض 1 (true) است. غیرفعال کردن verify ممکن است سوکت شما را به روی همگان باز کند و رمزنگاری را بیاثر سازد!
- cert=<filename>
- فایل حاوی گواهی و کلید خصوصی را برای احراز اصالت مشخص میکند. گواهی باید در قالب OpenSSL (*.pem) باشد. همراه با openssl-listen، استفاده از این گزینه بهشدت توصیه میشود. به جز در وضعیت استفاده از رمزنگارهٔ aNULL، در صورت ارائه نشدن گواهی، خطای "no shared ciphers" رخ خواهد داد.
- key=<filename>
- فایل حاوی کلید خصوصی را مشخص میکند. کلید خصوصی میتواند در این فایل یا در فایل ارائهشده با گزینهٔ cert قرار داشته باشد. طرفی که باید اثبات کند مالک یک گواهی است، به کلید خصوصی نیاز دارد.
- dhparams=<filename>
- فایل حاوی پارامترهای Diffie Hellman را مشخص میکند. این پارامترها میتوانند در فایل ارائهشده با گزینهٔ cert نیز قرار داشته باشند که در این صورت به گزینهٔ dhparams نیازی نخواهد بود..IP "cafile=<filename>" فایلی شامل گواهیهای مرجع (ریشه) مورد اعتماد را مشخص میکند. این فایل باید در قالب PEM باشد و شامل یک یا چند گواهی باشد. طرفی که اصالت همتای خود را بررسی میکند، تنها به گواهیهایی که درون این فایل هستند اعتماد میکند.
- capath=<dirname>
- دایرکتوری شامل گواهیهای (ریشه) مورد اعتماد را مشخص میکند. این دایرکتوری باید شامل گواهیهایی در قالب PEM و هشهای آنها باشد (مستندات OpenSSL را ببینید)
- egd=<filename>
- در برخی سیستمها، openssl به یک منبع صریح از دادههای تصادفی نیاز دارد. نام سوکتی را مشخص کنید که در آن یک دیمون جمعآوری آنتروپی مانند egd دادههای تصادفی ارائه میدهد، برای نمونه /dev/egd-pool.
- openssl-maxfraglen=<int>, maxfraglen=<int>
- برای اتصالهای کلاینت، یک Max Fragment Length Negotiation Request به سرور ارسال میکند تا حداکثر اندازه قطعهای را که سرور برای ما ارسال میکند محدود کند. طولهای پشتیبانیشده عبارتند از: 512، 1024، 2048 یا 4096. توجه داشته باشید که این گزینه برای OPENSSL-LISTEN قابل استفاده نیست.
- openssl-maxsendfrag=<int>, maxsendfrag=<int>
- حداکثر اندازه قطعهای را که به طرف مقابل ارسال خواهیم کرد محدود میکند. بازه طول پشتیبانیشده: 512 - 16384. توجه داشته باشید که تحت OPENSSL-LISTEN، بیشینه اندازه قطعه ممکن است در صورت ارسال Maximum Fragment Length Negotiation Request توسط کلاینت، بیشتر محدود شود.
- pseudo
- در
سیستمهایی
که openssl
نمیتواند
منبع
آنتروپی
پیدا کند و
هیچ دیمون
جمعآوری
آنتروپی
قابل
استفاده
نیست، این
گزینه
سازوکاری
را برای
ارائه
آنتروپی
شبهتصادفی
فعال
میکند. این
امر با
دریافت
زمان فعلی
بر حسب
میکروثانیه
برای تغذیه
تولیدکننده
اعداد
شبهتصادفی
libc با یک
مقدار
اولیه حاصل
میشود. سپس
openssl با خروجی
فراخوانیهای
()random تغذیه
میشود.
نکته: این سازوکار برای تولید کلیدهای امن کافی نیست! - compress
- استفاده از فشردهسازی را برای یک اتصال فعال یا غیرفعال میکند. تنظیم این گزینه روی "none" فشردهسازی را غیرفعال میکند و تنظیم آن روی "auto" به OpenSSL اجازه میدهد بهترین الگوریتم موجود و پشتیبانیشده توسط هر دو طرف را انتخاب کند. حالت پیشفرض این است که هیچیک از تنظیمات مربوط به فشردهسازی تغییر داده نشود. نکته: نیازمند OpenSSL نسخه 0.9.8 یا بالاتر است و غیرفعال کردن فشردهسازی با OpenSSL 0.9.8 بر تمام اتصالهای جدید در این فرایند تأثیر میگذارد.
- commonname=<string>
- مشخص میکند که گواهی همتا باید با کدام commonname مطابقت داشته باشد. با نشانی OPENSSL-CONNECT، این گزینه بر نام میزبان دادهشده یا آدرس IP مقصد اولویت دارد؛ با OPENSSL-LISTEN، این گزینه بررسی commonname گواهیهای همتا را فعال میکند. این گزینه تنها زمانی معنادار است که گزینه verify غیرفعال نشده باشد و رمز انتخابشده گواهی همتا را ارائه دهد.
- no-sni[=<bool>]
- از قابلیت Server
Name Indication (SNI) در سمت
کلاینت که
گواهی سرور
مدنظر را
انتخاب
میکند،
استفاده
نمیکند.
نکته: SNI از نسخه 1.7.4.0 ابزار socat به صورت خودکار استفاده میشود و از commonname یا نام میزبان دادهشده استفاده میکند. - snihost=<string>
- نام میزبان Server Name Indication (SNI) در سمت کلاینت را متفاوت از نام سرور خطابشده یا common name تنظیم میکند. این امر ممکن است زمانی مفید باشد که گواهی سرور دارای چندین نام میزبان یا نامهای الگو (wildcard) است، زیرا نام میزبان SNI به صورت متن آشکار به سرور ارسال میشود و ممکن است شنود شود؛ با این گزینه میتوان نامی ساختگی از گواهی مدنظر را انتقال داد.
- fips
- در صورت کامپایل بودن، حالت FIPS را فعال میکند. برای اطلاعات درباره استاندارد پیادهسازی رمزنگاری FIPS پیوند http://oss-institute.org/fips-faq.html را ببینید. این حالت ممکن است نیازمند این باشد که گواهیهای دخیل با نسخهای از openssl با قابلیت FIPS تولید شده باشند. تنظیم یا پاک کردن این گزینه در یک نشانی socat بر تمام آدرسهای OpenSSL این فرایند تأثیر میگذارد.
گروه گزینههای RETRY
گزینههایی که تلاش مجدد برای برخی از فراخوانیهای سیستمی، بهویژه تلاشهای اتصال را کنترل میکنند.
- retry=<num>
- تعداد دفعات تلاش مجدد پیش از لغو تلاش برای اتصال یا شنود. پیشفرض 0 است، که به معنای فقط یک تلاش است.
- interval=<timespec>
- زمان بین تلاشهای متوالی (بر حسب ثانیه، [timespec]). پیشفرض 1 ثانیه است.
- forever
- تعداد نامحدودی از تلاشهای مجدد را انجام میدهد.
گروه گزینههای INTERFACE
این گزینهها ممکن است برای آدرسهای INTERFACE و TUN اعمال شوند. این نوع آدرسها و گزینهها در حال حاضر تنها در سیستمعامل لینوکس پیادهسازی شدهاند.
نکته درباره VLANها: در بستههای ورودی، هسته لینوکس برچسب VLAN را پیش از تحویل دادهها به برنامه فضای کاربری روی سوکتهای خام (raw sockets) حذف میکند. برای دریافت اطلاعات VLAN اقدامات خاصی لازم است، packet(7) PACKET_AUXDATA را ببینید، و برای درج مجدد اختیاری برچسب درون بسته، در صورت نیاز از گزینه retrieve-vlan استفاده کنید.
- retrieve-vlan
- در بستههای ورودی روی سوکتهای خام، اطلاعات VLAN را بازیابی کرده و آن را برای پردازش بیشتر درون بستهها درج میکند (لینوکس)
- iff-up
- وضعیت رابط شبکه TUN را روی UP قرار میدهد. اکیداً توصیه میشود.
- iff-broadcast
- پرچم BROADCAST رابط شبکه TUN را تنظیم میکند.
- iff-debug
- پرچم DEBUG رابط شبکه TUN را تنظیم میکند.
- iff-loopback
- پرچم LOOPBACK رابط شبکه TUN را تنظیم میکند.
- iff-pointopoint
- پرچم POINTOPOINT دستگاه TUN را تنظیم میکند.
- iff-notrailers
- پرچم NOTRAILERS دستگاه TUN را تنظیم میکند.
- iff-running
- پرچم RUNNING دستگاه TUN را تنظیم میکند.
- iff-noarp
- پرچم NOARP دستگاه TUN را تنظیم میکند.
- iff-promisc
- پرچم PROMISC دستگاه TUN را تنظیم میکند.
- iff-allmulti
- پرچم ALLMULTI دستگاه TUN را تنظیم میکند.
- iff-master
- پرچم MASTER دستگاه TUN را تنظیم میکند.
- iff-slave
- پرچم SLAVE دستگاه TUN را تنظیم میکند.
- iff-multicast
- پرچم MULTICAST دستگاه TUN را تنظیم میکند.
- iff-portsel
- پرچم PORTSEL دستگاه TUN را تنظیم میکند.
- iff-automedia
- پرچم AUTOMEDIA دستگاه TUN را تنظیم میکند.
- iff-dynamic
- پرچم DYNAMIC دستگاه TUN را تنظیم میکند.
- interface-mtu=<num> (if-mtu=<num>)
- مقدار MTU رابطها را با استفاده از رابط netlink تنظیم میکند.
گروه گزینههای TUN
گزینههایی که آدرسهای دستگاه رابط TUN/TAP لینوکس را کنترل میکنند.
- tun-device=<device-file>
- به socat دستور میدهد که مسیر دیگری را برای دستگاه شبیهسازی TUN انتخاب کند. پیشفرض /dev/net/tun است.
- tun-name=<if-name>
- به رابط شبکه حاصل، نامی خاص به جای نامهای تولیدشده توسط سیستم (مانند tun0، tun1 و غیره) اختصاص میدهد.
- tun-type=[tun|tap]
- نوع دستگاه TUN را تعیین میکند؛ از این گزینه برای ایجاد یک دستگاه TAP استفاده کنید. برای بررسی تفاوت بین این نوعها، مستندات لینوکس را ببینید. هنگامی که تلاش میکنید تونلی میان دو دستگاه TUN برقرار کنید، نوع آنها باید یکسان باشد.
- iff-no-pi
- پرچم IFF_NO_PI را تنظیم میکند که کنترل میکند آیا دستگاه اطلاعات اضافی بسته را در تونل بگنجاند یا خیر. هنگامی که تلاش میکنید تونلی میان دو دستگاه TUN برقرار کنید، این پرچمها باید مقادیر یکسانی داشته باشند.
گروه گزینههای POSIX-MQ
گزینههایی که ممکن است بر آدرسهای POSIX-MQ اعمال شوند.
- posixmq-priority=<link(TYPE_UNSIGNED_INT)(unsigned int)> (mq-prio)
- ) اولویت پیامها (بستهها)ی نوشتهشده در صف، یا کمینه اولویت بستهای را که باید از صف خوانده شود، تعیین میکند.
- posixmq-flush (mq-flush)
- پیش از آغاز انتقال، تمام پیامهای موجود در صف را "مصرف" (حذف) میکند.
- posixmq-maxmsg=<long> (mq-maxmsg)
- پارامتر maxmsg
صف پیام POSIX را
هنگام
ایجاد آن
تعیین
میکند.
نکته: این گزینه تنها زمانی اعمال میشود که صف از قبل وجود نداشته باشد.
نکته: این مقدار توسط تنظیمات هسته در /proc/sys/fs/mqueue/msg_max محدود شده است و پیشفرض سیستم تا حد 10 پایین است..IP "posixmq-msgsize=<long> (mq-msgsize)" هنگام ایجاد صف پیام POSIX، پارامتر msgsize آن را تنظیم میکند.
نکته: این گزینه فقط زمانی اعمال میشود که صف از قبل وجود نداشته باشد.
نکته: این مقدار توسط تنظیم هسته /proc/sys/fs/mqueue/msgsize_max محدود میشود.
مقادیر داده (DATA VALUES)
این بخش انواع دادههای مختلفی را که پارامترهای نشانی و گزینههای نشانی میتوانند بپذیرند، توضیح میدهد.
- address-range
- در حال حاضر فقط برای IPv4 و IPv6 پیادهسازی شده است. گزینه نشانی `range’ را ببینید.
- bool
- "0" یا "1"؛ اگر مقدار حذف شود، "1" در نظر گرفته میشود.
- byte
- یک عدد unsigned int، خواندهشده با strtoul() ، کوچکتر یا مساوی با UCHAR_MAX .
- command-line
- رشتهای که نام یک برنامه و آرگومانهای آن را مشخص میکند، جداشده با یک فاصله ساده.
- data
- این یک
مشخصه
عمومیتر
داده است،
"dalan" (زبان
توصیف داده
سطح پایین).
رشته متنی
دادهشده
حاوی
اطلاعاتی
درباره نوع
داده هدف و
مقدار آن
است. بهطور
کلی نویسه
آغازین نوع
موردِ داده
بعدی را
مشخص
میکند. در
زمینه خاص
آن ممکن است
یک نوع داده
پیشفرض
وجود داشته
باشد.
در حال حاضر فقط مشخصات زیر پیادهسازی شدهاند:
- i
- یک عدد صحیح
علامتدار،
ذخیرهشده
به ترتیب
بایت
میزبان (host byte order).
مثال: i-1000 (عدد صحیح -1000) - I
- یک عدد صحیح
بدون
علامت،
ذخیرهشده
به ترتیب
بایت
میزبان.
- l
- یک عدد صحیح
بلند
علامتدار،
ذخیرهشده
به ترتیب
بایت
میزبان.
- L
- یک عدد صحیح
بلند بدون
علامت،
ذخیرهشده
به ترتیب
بایت
میزبان.
- s
- یک عدد صحیح
کوتاه
علامتدار،
ذخیرهشده
به ترتیب
بایت
میزبان.
- S
- یک عدد صحیح
کوتاه بدون
علامت،
ذخیرهشده
به ترتیب
بایت
میزبان.
- b
- یک بایت
علامتدار
(signed char).
- B
- یک بایت
بدون علامت
(unsigned char).
- x
- در ادامه
تعداد زوجی
از ارقام
هگز قرار
دارد،
ذخیرهشده
بهصورت
دنبالهای
از
بایتها؛
طول داده
تعداد
بایتهای
حاصل است.
مثال: x7f000001 (نشانی IP 127.0.0.1) - "
- در ادامه
رشتهای
قرار دارد
که با
تبدیلهای
متداول \n \r \t \f \b \a \e \0
استفاده
میشود؛
رشته باید
با ’"’ بسته
شود. لطفاً
توجه داشته
باشید که
نقلقولها
و
بکاسلشها
باید از
پوسته و
تبدیل socat
اسکیپ شوند.
هیچ \0 ضمنی
اضافه
نمیشود.
مثال: "Hello world!\n" - ’
- یک نویسه
تکی (char)، با
تبدیلهای
معمول.
لطفاً توجه
داشته
باشید که
نقلقولها
و
بکاسلشها
باید از
پوسته و
تبدیل socat
اسکیپ شوند.
مثال: ’a’ موارد داده را میتوان با فاصله (whitespace) جدا کرد بدون نیاز به تکرار دوباره مشخصکننده نوع. - directory
- رشتهای با معناشناسی معمول نام دایرکتوری UN*X.
- facility
- نام یک facility در syslog با حروف کوچک.
- fdnum
- نوعی از unsigned int، خواندهشده با strtoul() ، که یک توصیفگر فایل UN*X را مشخص میکند.
- filename
- رشتهای با معناشناسی معمول نام فایل UN*X.
- group
- اگر نویسه اول یک رقم دهدهی باشد، مقدار با strtoul() بهصورت یک عدد صحیح بدون علامت خوانده میشود که یک شناسه گروه (group id) را مشخص میکند. در غیر این صورت، باید نام یک گروه موجود باشد.
- int
- عددی که از قوانین تابع strtol() با مبنای "0" پیروی میکند، یعنی عدد دهدهی، عدد در مبنای هشت با "0" آغازین، یا عدد هگزادسیمال با "0x" آغازین. مقدار باید در یک int زبان C بگنجد.
- interface
- رشتهای که نام دستگاهِ یک رابط شبکه را همانطور که توسط ifconfig یا procan نشان داده میشود، مشخص میکند، مانند "eth0".
- IP address
- یک نشانی IPv4
در قالب
اعداد و
نقطه، یک
نشانی IPv6 در
قالب هگز
محصور در
براکت، یا
یک نام
میزبان که
به یک نشانی
IPv4 یا IPv6 تحلیل
میشود.
مثالها: 127.0.0.1, [::1], www.dest-unreach.org, dns1 - IPv4 address
- یک نشانی IPv4
در قالب
اعداد و
نقطه یا یک
نام میزبان
که به یک
نشانی IPv4
تحلیل
میشود.
مثالها: 127.0.0.1, www.dest-unreach.org, dns2 - IPv6 address
- یک نشانی IPv6
در قالب
اعداد هگز و
دونقطه
محصور در
براکت، یا
یک نام
میزبان که
به یک نشانی
IPv6 تحلیل
میشود.
مثالها: [::1], [1234:5678:9abc:def0:1234:5678:9abc:def0], ip6name.domain.org - long
- عددی خواندهشده با strtol() . مقدار باید در یک long زبان C بگنجد.
- long long
- عددی خواندهشده با strtoll() . مقدار باید در یک long long زبان C بگنجد.
- off_t
- یک عدد علامتدار وابسته به پیادهسازی، معمولاً ۳۲ بیتی، خواندهشده با strtol یا strtoll.
- off64_t
- یک عدد علامتدار وابسته به پیادهسازی، معمولاً ۶۴ بیتی، خواندهشده با strtol یا strtoll.
- mode_t
- یک عدد صحیح بدون علامت، خواندهشده با strtoul() ، که بیتهای حالت (مجوز) را مشخص میکند.
- pid_t
- عددی خواندهشده با strtol() ، که شناسه فرایند (PID) را مشخص میکند.
- port
- یک uint16_t (عدد ۱۶ بیتی بدون علامت) که یک پورت TCP یا UDP را مشخص میکند، خواندهشده با strtoul() .
- protocol
- یک عدد ۸ بیتی بدون علامت، خواندهشده با strtoul() .
- size_t
- یک عدد بدون علامت با محدودیتهای size_t، خواندهشده با strtoul .
- sockname
- یک نشانی سوکت. گزینه نشانی `bind’ را ببینید.
- string
- دنبالهای از نویسهها، بدون داشتن ’\0’ و بسته به موقعیت در خط فرمان، بدون ’:’، ’,’ یا "!!". توجه داشته باشید که ممکن است نیاز باشد نویسههای متا پوسته را در خط فرمان اسکیپ کنید.
- TCP service
- نام یک سرویس، بدون شروع با رقم، که توسط getservbyname() تحلیل میشود، یا یک عدد ۱۶ بیتی unsigned int خواندهشده با strtoul() .
- timeval
- یک عدد ممیز شناور با دقت مضاعف (double float) که ثانیهها را مشخص میکند؛ عدد درون یک struct timeval، متشکل از ثانیهها و میکروثانیهها نگاشت میشود.
- timespec
- یک عدد ممیز شناور با دقت مضاعف (double float) که ثانیهها را مشخص میکند؛ عدد درون یک struct timespec، متشکل از ثانیهها و نانوثانیهها نگاشت میشود.
- UDP service
- نام یک سرویس، بدون شروع با رقم، که توسط getservbyname() تحلیل میشود، یا یک عدد ۱۶ بیتی unsigned int خواندهشده با strtoul() ..IP "unsigned int" عددی که با strtoul() خوانده میشود. مقدار باید در یک unsigned int در زبان C بگنجد.
- user
- اگر نویسه نخست یک رقم دهدهی باشد، مقدار با strtoul() بهعنوان یک عدد صحیح بدون علامت که شناسه کاربر (user id) را مشخص میکند خوانده میشود. در غیر این صورت، باید نام یک کاربر موجود باشد.
- VSOCK cid
- یک uint32_t (عدد ۳۲ بیتی بدون علامت) که شناسه زمینه VSOCK را مشخص میکند (CID)، خواندهشده با strtoul() . چندین آدرس ویژه وجود دارد: VMADDR_CID_ANY (-1U) به معنای هر آدرسی برای مقیدسازی (bind) است؛ VMADDR_CID_HOST (2) آدرس شناختهشده میزبان است.
- VSOCK port
- یک uint32_t (عدد ۳۲ بیتی بدون علامت) که پورت VSOCK را مشخص میکند، خواندهشده با strtoul() .
مثالها (EXAMPLES)
socat - TCP4:www.domain.org:80
- دادهها را میان STDIO (-) و یک اتصال TCP4 به پورت ۸۰ از میزبان www.domain.org انتقال میدهد. این مثال نتیجهای مشابه یک اتصال تعاملی با telnet یا netcat دارد. پارامترهای ترمینال stdin تغییر داده نمیشوند، بنابراین میتوانید بازپخش (relay) را با ^D ببندید یا با ^C آن را متوقف کنید.
socat -d -d \
READLINE,history=$HOME/.http_history \ TCP4:www.domain.org:www,crnl
- این مثال شبیه به مورد پیشین است، با این تفاوت که میتوانید سطر فعلی را به شیوهای مشابه bash ویرایش کنید (READLINE) و از فایل تاریخچه .http_history بهره ببرید؛ socat پیامهایی را درباره پیشرفت فرایند چاپ میکند (-d -d). پورت بر اساس نام سرویس (www) مشخص شده است، و نویسههای درست پایان سطر شبکه (crnl) به جای NL استفاده شدهاند.
socat \
TCP4-LISTEN:www \ TCP4:www.domain.org:www
- یک فورواردر ساده پورت TCP را برپا میکند. با گزینه TCP4-LISTEN روی پورت محلی "www" تا زمان برقراری یک اتصال به گوش مینشیند، آن را میپذیرد (accept)، سپس به میزبان دوردست (TCP4) متصل میشود و انتقال داده را آغاز میکند. این دستور اتصال دوم را نخواهد پذیرفت.
socat -d -d -lmlocal2 \
TCP4-LISTEN:80,bind=myaddr1,reuseaddr,fork,su=nobody,range=10.0.0.0/8 \ TCP4:www.domain.org:80,bind=myaddr2
- یک فورواردر پورت TCP، که هر سمت آن به یک آدرس IP محلی مجزا مقید شده است (bind). این مثال با انجام انشعاب فرایند جدید (fork) پس از هر accept() تعداد تقریباً نامحدودی از اتصالات موازی یا متوالی را مدیریت میکند. با تغییر شناسه کاربر (su) به کاربر nobody پس از انشعاب، تا حدی امنیت ایجاد میکند؛ تنها به اتصالاتِ شبکه خصوصی 10 اجازه دسترسی میدهد (range)؛ به لطف reuseaddr، راهاندازی مجددِ فوری پس از خاتمه فرایند والد ممکن است، حتی اگر برخی از سوکتهای فرزند کاملاً بسته نشده باشند. با گزینه -lmlocal2، برنامه socat تا زمان رسیدنِ موفقیتآمیز به حلقه accept لاگها را به stderr ارسال میکند. لاگهای بعدی به syslog با تسهیلات (facility) محلی local2 هدایت میشوند.
socat \
TCP4-LISTEN:5555,fork,tcpwrap=script \ EXEC:/bin/myscript,chroot=/home/sandbox,su-d=sandbox,pty,stderr
- یک سرور ساده که اتصالات را میپذیرد (TCP4-LISTEN) و برای هر اتصال یک فرایند فرزند جدید منشعب میکند (fork)؛ هر فرزند مانند یک رله تکمنظوره عمل میکند. کلاینت باید با قوانین مربوط به نام فرایند دیمن "script" در /etc/hosts.allow و /etc/hosts.deny همخوانی داشته باشد، در غیر این صورت دسترسی آن رد میشود (ببینید "man 5 hosts_access"). برای اجرای (EXEC) برنامه، فرایند فرزند ریشه فایلسیستم را به /home/sandbox تغییر میدهد (chroot)، به کاربر sandbox سوئیچ میکند (su)، و سپس برنامه /home/sandbox/bin/myscript را اجرا میکند. Socat و myscript از طریق یک شبهترمینال (pty) ارتباط برقرار میکنند؛ خروجی خطای استاندارد (stderr) مربوط به myscript به خروجی استاندارد (stdout) هدایت میشود، بنابراین پیامهای خطای آن از طریق socat به کلاینت متصل منتقل میگردند.
socat \
EXEC:"mail.sh target@domain.com",fdin=3,fdout=4 \ TCP4:mail.relay.org:25,crnl,bind=alias1.server.org,mss=512
- فایل mail.sh یک اسکریپت شل است که همراه با socat توزیع شده و یک کلاینت ساده SMTP را پیادهسازی میکند. این اسکریپت طوری برنامهریزی شده است که با پروتکل SMTP روی توصیفگرهای فایل (FDs) شماره ۳ (ورودی) و ۴ (خروجی) تبادل داده کند. گزینههای fdin و fdout به socat میگویند که برای ارتباط با برنامه از این FDها استفاده کند. از آنجا که mail.sh ورودی و خروجی استاندارد (stdin و stdout) را به ارث میبرد در حالی که socat از آنها استفاده نمیکند، این اسکریپت میتواند متن ایمیل را از stdin بخواند. Socat مقدار alias1 را به عنوان آدرس مبدأ محلی شما قرار میدهد (bind)، نویسههای صحیح پایان سطر شبکه را رعایت میکند (crnl) و حداکثر ۵۱۲ بایت داده در هر بسته ارسال مینماید (mss).
socat \
-,escape=0x0f \ /dev/ttyS0,rawer,crnl
- یک اتصال تعاملی از طریق خط سریال باز میکند، برای نمونه جهت گفتگو با یک مودم. گزینه rawer پارامترهای ترمینال کنسول و ttyS0 را به مقادیر کاربردی تنظیم میکند، crnl نویسهها را به پایانسطرهای صحیح تبدیل میکند. escape امکان خاتمه دادن به فرایند socat را با نویسه control-O فراهم میکند. میتوانید استفاده از READLINE را به جای نشانی نخست مد نظر قرار دهید.
socat \
UNIX-LISTEN:/tmp/.X11-unix/X1,fork \ SOCKS4:host.victim.org:127.0.0.1:6000,socksuser=nobody,sourceport=20
- با گزینه UNIX-LISTEN، دستور socat یک سوکت دامنهی یونیکسِ شنونده در /tmp/.X11-unix/X1 باز میکند. این مسیر متناظر با نمایشگر محلی XWindow یعنی :1 روی رایانه شماست، بنابراین اتصالات کلاینت XWindow به DISPLAY=:1 پذیرفته میشوند. سپس Socat با سرور SOCKS4 یعنی host.victim.org ارتباط برقرار میکند که ممکن است به دلیل یک ضعف مرتبط با FTP در فیلترهای ایستا IP خود، اتصالات مبتنی بر sourceport 20 را بپذیرد. Socat وانمود میکند که توسط socksuser به نام nobody فراخوانی شده است، و درخواست میکند که به پورت لوپبک ۶۰۰۰ متصل شود (تنها پیکربندیهای ضعیف sockd اجازه چنین کاری را میدهند). بنابراین ما به سرور XWindow هدف متصل میشویم و اگر نیازی به کوکیهای MIT یا احراز هویت Kerberos نداشته باشد، میتوانیم کار خود را آغاز کنیم. لطفاً توجه داشته باشید که در هر زمان تنها یک اتصال میتواند برقرار باشد، چرا که TCP برای یک مجموعه مشخص از آدرسها و پورتها تنها میتواند یک نشست را ایجاد کند.
socat -u \
/tmp/readdata,seek-end=0,ignoreeof \ STDIO
این مثالی برای انتقال یکطرفه دادهها (-u) است. Socat دادهها را از فایل /tmp/readdata (آدرس ضمنی GOPEN) منتقل میکند، با شروع از انتهای فعلی آن (گزینه seek-end=0 باعث میشود socat خواندن را از انتهای فعلی فایل آغاز کند؛ برای خواندن دادههای موجود در ابتدا از seek=0 یا عدم استفاده از گزینه seek استفاده کنید) در حالتی شبیه به "tail -f" (گزینه ignoreeof). این "فایل" همچنین میتواند یک سوکت یونیکس دامین شنونده (listening UNIX domain socket) باشد (در این صورت از گزینه seek استفاده نکنید).
(sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) | \ socat - \
EXEC:'ssh -l user server',pty,setsid,ctty
- یک نشست ssh را با EXEC به server برقرار و اجرا میکند. از یک pty برای ارتباط میان socat و ssh استفاده میکند، آن را به controlling tty مربوط به ssh (گزینه ctty) تبدیل میکند، و این pty را مالک یک گروه فرایند جدید (setsid) میسازد، تا ssh گذرواژه را از socat بپذیرد.
socat -u \
TCP4-LISTEN:3334,reuseaddr,fork \ OPEN:/tmp/in.log,creat,append
- یک گردآورنده پیام مبتنی بر شبکه ساده را پیادهسازی میکند. به ازای هر کلاینتی که به پورت 3334 متصل میشود، یک فرایند فرزند جدید ایجاد میگردد (گزینه fork). تمام دادههای ارسالشده توسط کلاینتها به انتهای فایل /tmp/in.log الحاق (append) میشوند. اگر فایل وجود نداشته باشد، socat آن را ایجاد (creat) میکند. گزینه reuseaddr امکان راهاندازی مجدد فوری فرایند سرور را فراهم میسازد.
socat \
READLINE,noecho='[Pp]assword:' \ EXEC:'ftp ftp.server.com',pty,setsid,ctty
- یک تاریخچه خط فرمان (READLINE) را به دور ابزار کلاینت ftp اجراشده با EXEC اضافه میکند. این کار امکان ویرایش و استفاده مجدد از دستورهای FTP را برای مرور نسبتاً راحت در سلسلهمراتب پوشههای ftp فراهم میسازد. گذرواژه نمایش داده میشود (echo)! برای اینکه ftp اعلان دستور (prompt) صادر کند، وجود pty الزامی است. با این وجود، ممکن است تداخل یا ابهاماتی در ارتباط با گذرواژه و اعلانهای FTP رخ دهد.
socat \
PTY,link=$HOME/dev/vmodem0,rawer,wait-slave \ EXEC:'"ssh modemserver.us.org socat - /dev/ttyS0,nonblock,rawer"'
- یک دستگاه شبهترمینال (PTY) روی کلاینت ایجاد میکند که از طریق پیوند نمادین $HOME/dev/vmodem0 قابل دسترس است. برنامهای که انتظار یک پورت سریال یا مودم را دارد میتواند برای استفاده از $HOME/dev/vmodem0 پیکربندی شود؛ ترافیک آن از طریق ssh به یک modemserver هدایت میشود، جایی که نمونه دیگری از socat آن را به /dev/ttyS0 متصل میکند.
sudo socat --experimental \
TCP4-LISTEN:8000,reuseaddr,fork,netns=namespace1 \ TCP4-CONNECT:server2:8000
- یک شنونده در network namespace دادهشده ایجاد میکند که اتصالات TCP را روی پورت 8000 پذیرفته و آنها را به server2 هدایت (forward) میکند.
sudo socat --experimental \
TUN:192.168.2.1/24,up \ TUN:192.168.2.2/24,up,netns=namespace2
- دو رابط شبکه مجازی ایجاد میکند، یکی در namespace پیشفرض و دیگری در namespace2، و بستهها را میان آنها هدایت کرده و مانند یک اتصال شبکه مجازی عمل میکند.
socat \
TCP4-LISTEN:2022,reuseaddr,fork \ PROXY:proxy.local:www.domain.org:22,proxyport=3128,proxyauth=username:s3cr3t
- یک هدایتکننده (forwarder) را آغاز میکند که اتصالات را روی پورت 2022 میپذیرد و آنها را از طریق دیمن پروکسی در حال شنود روی پورت 3128 (proxyport) در میزبان proxy.local، با استفاده از روش CONNECT ارسال میکند؛ در آنجا اتصالات با عنوان "username" و با "s3cr3t" احراز هویت میشوند (proxyauth). سپس proxy.local باید اتصالات را با میزبان www.domain.org روی پورت 22 برقرار کند.
socat - \
SSL:server:4443,cafile=./server.crt,cert=./client.pem
- یک کلاینت OpenSSL
است که تلاش
میکند یک
اتصال امن
به یک سرور SSL
برقرار کند.
گزینه cafile
فایلی را
مشخص
میکند که
شامل
گواهیهای
معتمد است:
ما تنها
زمانی به
سرور
اعتماد
میکنیم که
یکی از این
گواهیها
را ارائه
کرده و
اثبات کند
که کلید
خصوصی
مربوطه را
در اختیار
دارد. در
غیر این
صورت اتصال
پایان
مییابد. با
گزینه cert
فایلی حاوی
گواهی
کلاینت و
کلید خصوصی
مرتبط مشخص
میشود. این
مورد در
صورتی لازم
است که سرور
خواستار
احراز هویت
کلاینت
باشد؛
بسیاری از
سرورهای
اینترنتی
چنین
درخواستی
ندارند.
آدرس اول (’-’) میتواند با تقریباً هر آدرس دیگری از socat جایگزین شود.
socat \
OPENSSL-LISTEN:4443,reuseaddr,pf=ip4,fork,cert=./server.pem,cafile=./client.crt \ PIPE
- یک سرور OpenSSL
است که
اتصالات TCP
را
میپذیرد،
گواهی را از
فایل server.pem
ارائه
میدهد و
کلاینت را
وادار
میکند
گواهیای
ارائه دهد
که در برابر
cafile.crt
اعتبارسنجی
میشود.
آدرس دوم (’PIPE’) میتواند با تقریباً هر آدرس دیگری از socat جایگزین شود.
برای دستورالعملهای مربوط به ایجاد و توزیع کلیدها و گواهیهای OpenSSL، مستندات تکمیلی socat در socat-openssl.txt را ببینید.
echo | socat -u - \
FILE:/tmp/bigfile,create,largefile,seek=100000000000
- یک فایل تنک (sparse file) به اندازه 100GB+1B ایجاد میکند؛ این کار نیازمند نوعی سیستم فایل است که از آن پشتیبانی کند (ext2, ext3, ext4, reiserfs, xfs؛ نه minix, vfat). عملیات نوشتن ۱ بایت ممکن است زمانبر باشد (reiserfs: چند دقیقه؛ ext2: بدون زمان "no" time)، و فایل حاصل ممکن است صرفاً به خاطر inodeهای خود مقداری از فضای دیسک را اشغال کند (reiserfs: مقدار 2MB؛ ext2: مقدار 16KB).
socat \
TCP-L:7777,reuseaddr,fork \ SYSTEM:'filan -i 0 -s >&2',nofork
- برای اتصالات ورودی TCP روی پورت 7777 به شنود مینشیند. به ازای هر اتصال پذیرفتهشده، یک شل را فراخوانی میکند. این شل stdin و stdout خود را بهطور مستقیم به سوکت TCP متصل دارد (nofork). شل دستور filan را اجرا کرده و باعث میشود آدرسهای سوکت را در stderr (پنجره ترمینال شما) چاپ کند..IP
socat \
STDIO,cfmakeraw \ SHELL,pty,setsid,ctty,stderr
- یک پوسته در پایانهی فعلی ایجاد میکند که کنترل کارها (job control)، تاریخچه و غیره را فراهم میسازد.
echo -e "\0\14\0\0\c" | socat -u - \
FILE:/usr/bin/squid.exe,seek=0x00074420
- به عنوان یک ویرایشگر باینری ابتدایی عمل میکند: ۴ بایت 000 014 000 000 را در آفست 0x00074420 از فایل اجرایی /usr/bin/squid.exe مینویسد (این یک وصلهی واقعی در سال ۲۰۰۴ برای اجرای فایل اجرایی squid مربوط به Cygwin تحت Windows بود).
socat - \
TCP:www.blackhat.org:31337,readbytes=1000
- به یک سرویس ناشناخته متصل میشود و از سرریز شدن دادهها جلوگیری میکند.
socat -U \
TCP:target:9999,end-close \ TCP-L:8888,reuseaddr,fork
- دادههای دریافتی از جریانهای مختلف TCP روی پورت 8888 را به یک جریان منفرد به target:9999 ادغام میکند. گزینه end-close از قطع شدن اتصال اشتراکی به 9999 توسط فرآیندهای فرزند (که توسط نشانی دوم fork شدهاند) جلوگیری میکند (تابع close(2) تنها ارجاع inode را حذف میکند که تا زمان حیات فرآیند والد فعال باقی میماند؛ در حالی که shutdown(2) اتصال را بهطور فعال خاتمه میدهد).
socat \
TCP-LISTEN:10021,reuseaddr,socktype=6,protocol=33,fork PIPE
- یک سرور اکو (echo server) سادهی DCCP است. اکنون DCCP مستقیماً در socat تعبیه شده است، اما این مثال نشان میدهد چگونه میتوان از روالهای TCP در socat استفاده کرد و نوع سوکت را به SOCK_DCCP=6 (در Linux) و پروتکل IP را به IPPROTO_DCCP=33 تغییر داد.
socat - \
TCP:<server>:10021,reuseaddr,socktype=6,protocol=33,fork
- یک کلاینت سادهی DCCP است. اکنون DCCP مستقیماً در socat تعبیه شده است، اما این مثال نشان میدهد چگونه میتوان از روالهای TCP در socat استفاده کرد، اما نوع سوکت را به SOCK_DCCP=6 (در Linux) و پروتکل IP را به IPPROTO_DCCP=33 تغییر داد.
socat - \
UDP4-DATAGRAM:192.168.1.0:123,sp=123,broadcast,range=192.168.1.0/24
- یک برودکست (broadcast) به شبکهی 192.168.1.0/24 ارسال کرده و پاسخهای سرورهای زمان موجود در آن را دریافت میکند. بستههای NTP از میزبانهای خارج از این شبکه را نادیده میگیرد.
socat - \
SOCKET-DATAGRAM:2:2:17:x007bxc0a80100x0000000000000000,bind=x007bx00000000x0000000000000000,setsockopt-int=1:6:1,range=x0000xc0a80100x0000000000000000:x0000xffffff00x0000000000000000
- از نظر معنایی معادل مثال قبلی است، اما تمامی پارامترها در قالبی عمومی (generic) مشخص شدهاند. مقدار 6 برای setsockopt-int همان مقدار معادل SO_BROADCAST در Linux است.
socat - \
IP4-DATAGRAM:255.255.255.255:44,broadcast,range=10.0.0.0/8
- با استفاده از پروتکل 44 یک برودکست به شبکه(های) محلی ارسال میکند. تنها پاسخها را از محدودهی نشانیهای خصوصی میپذیرد.
socat - \
UDP4-DATAGRAM:224.255.0.1:6666,bind=:6666,ip-add-membership=224.255.0.1:eth0
- با استفاده از UDP دادهها را از stdin به نشانی چندپخشی (multicast) مشخصشده منتقل میکند. هر دو پورت محلی و راه دور 6666 هستند. به رابط eth0 دستور میدهد که بستههای چندپخشی گروه مربوطه را نیز بپذیرد. چندین میزبان در شبکهی محلی میتوانند این دستور را اجرا کنند، به طوری که تمام دادههای ارسالی توسط هر یک از میزبانها توسط بقیه دریافت خواهد شد. توجه داشته باشید که دلایل متعددی برای بروز خطا وجود دارد، از جمله فیلترهای IP، مشکلات مسیریابی، انتخاب نادرست رابط توسط سیستمعامل، پلها (bridges) یا سوئیچی که به درستی پیکربندی نشده است.
socat \
UDP:host2:4443 \ TUN:192.168.255.1/24,up
- یک سوی یک شبکهی مجازی (اما نه خصوصی!) را با host2 برقرار میکند که در آن ممکن است فرآیندی مشابه با UDP-L و نشانی tun به مقدار 192.168.255.2 اجرا شود. آنها میتوانند با استفاده از نشانیهای 192.168.255.1 و 192.168.255.2 به یکدیگر دسترسی داشته باشند. توجه داشته باشید که ارسال جریانی دادهها مثلاً از طریق TCP یا SSL، حفظ مرز بستهها را تضمین نمیکند و از این رو ممکن است باعث از دست رفتن بستهها (packet loss) شود.
socat - \
VSOCK-CONNECT:2:1234
- یک اتصال VSOCK با میزبان (میزبان همیشه با CID=2 شناختهشده در دسترس است) روی پورت 1234 برقرار میکند.
socat - \
VSOCK-LISTEN:1234
- روی پورت 1234 به اتصالات ورودی VSOCK گوش میدهد.
socat - \
VSOCK-CONNECT:31:4321,bind:5555
- یک اتصال VSOCK با سیستم مهمان (guest) دارای CID=31 روی پورت 1234 برقرار کرده و سوکت محلی را به پورت 5555 متصل (bind) میکند.
socat \
VSOCK-LISTEN:3333,reuseaddr,fork \ VSOCK-CONNECT:42,3333
هدایتکنندهای را آغاز میکند که اتصالات VSOCK را روی پورت 3333 میپذیرد و آنها را به میهمان با CID=42 روی همان پورت هدایت میکند.
socat \
VSOCK-LISTEN:22,reuseaddr,fork \ TCP:localhost:22
- اتصالات VSOCK را از پورت 22 به کارساز محلی SSH هدایت میکند. اجرای این دستور در یک ماشین مجازی (VM) به شما اجازه میدهد همانند مثال زیر، از طریق SSH و با استفاده از VSOCK از سیستم میزبان متصل شوید.
socat \
TCP4-LISTEN:22222,reuseaddr,fork \ VSOCK-CONNECT:33:22
- اتصالات TCP را از پورت 22222 به میهمان با CID=33 که روی پورت VSOCK 22 گوش میدهد هدایت میکند. در صورتی که میهمان مثال بالا را اجرا کند، اجرای این دستور در میزبان به شما اجازه میدهد با اجرای "ssh -p 22222 user@localhost" از طریق SSH متصل شوید.
socat \
PTY,link=/var/run/ppp,rawer \ INTERFACE:hdlc0
- این مشکل را که pppd به یک دستگاه سریال نیاز دارد و بنابراین ممکن است نتواند روی یک خط همگام (synchronous) که توسط یک دستگاه شبکه نمایش داده میشود کار کند، دور میزند. دستور socat یک PTY برای راضی نگهداشتن pppd ایجاد کرده، به رابط شبکهٔ hdlc0 متصل میشود، و میتواند دادهها را میان هر دو دستگاه انتقال دهد. سپس از pppd روی دستگاه /var/run/ppp استفاده کنید.
socat -u \
STDIO \ POSIXMQ-SEND:/queue1,unlink-early,mq-prio=10
- بستههای خواندهشده از stdio (یعنی خطوط ورودی هنگام اجرای تعاملی) را با اولویت 10 در صف پیامهای POSIX مینویسد.
socat -u \
POSIXMQ-RECV:/queue1,fork,max-children=3 \ SYSTEM:"worker.sh"
- پیامها (بستهها) را از صف پیامهای POSIX دریافت کرده و برای هر پیام، یک زیرفرآیند منشعب (fork) میکند که پیام را خوانده و پردازش مینماید. در هر لحظه حداکثر ۳ زیرفرآیند به صورت همزمان مجاز است.
socat -T 1 -d -d \
TCP-L:10081,reuseaddr,fork,crlf \ SYSTEM:"echo -e \"\\\"HTTP/1.0 200 OK\\\nDocumentType: text/plain\\\n\\\ndate: \$\(date\)\\\nserver:\$SOCAT_SOCKADDR:\$SOCAT_SOCKPORT\\\nclient: \$SOCAT_PEERADDR:\$SOCAT_PEERPORT\\\n\\\"\"; cat; echo -e \"\\\"\\\n\\\"\""
- یک کارساز پژواک (echo server) بسیار ابتدایی HTTP ایجاد میکند: هر کلاینت HTTP که متصل میشود یک پاسخ معتبر HTTP دریافت میکند که حاوی اطلاعاتی دربارهٔ نشانی و پورت کلاینت آنگونه که توسط میزبان کارساز دیده میشود، نشانی میزبان (که ممکن است روی کارسازهای چندشبکهای [multihomed] متغیر باشد)، و درخواست اصلی کلاینت است.
socat -d -d \
UDP4-RECVFROM:9999,so-broadcast,so-timestamp,ip-pktinfo,ip-recverr,ip-recvopts,ip-recvtos,ip-recvttl!!- \ SYSTEM:'export; sleep 1' |
grep SOCAT
- منتظر یک بستهٔ ورودی UDP روی پورت 9999 میماند و متغیرهای محیطی ارائهشده توسط socat را چاپ میکند. در سیستمهای مبتنی بر BSD باید ip-pktinfo را با ip-recvdstaddr,ip-recvif جایگزین کنید. متغیر SOCAT_IP_DSTADDR اهمیت ویژهای دارد: این متغیر حاوی نشانی مقصد بسته است که میتواند یک نشانی unicast، multicast یا broadcast باشد.
echo -e "M-SEARCH * HTTP/1.1\nHOST: 239.255.255.250:1900\nMAN: \"ssdp:discover\"\nMX: 4\nST: \"ssdp:all\"\n" | socat - \
UDP-DATAGRAM:239.255.255.250:1900,crlf
- یک پرسوجوی SSDP (پروتکل کشف سادهٔ سرویس یا Simple Service Discovery Protocol) به شبکهٔ محلی ارسال کرده و پاسخهای دریافتشده را جمعآوری و چاپ میکند.
systemd-socket-activate -l 1077 --inetd socat ACCEPT:0,fork PIPE
- برنامهٔ systemd-socket-activate ابزاری برای آزمایش فعالسازی سوکت systemd برای دیمنها است. با گزینهٔ --inetd، منتظر یک اتصال روی پورت مشخصشده میماند. این برنامه اتصال را قبول (accept) نمیکند، بلکه توصیفگر فایل در حال گوش دادن را به عنوان FDهای 0 و 1 منتقل میکند. دستور Socat اتصالِ در انتظار را میپذیرد و انتقال داده را آغاز مینماید.
sudo socat -u TEXT:"0 $((2**31-1))" /proc/sys/net/ipv4/ping_group_range
- با استفاده از نشانی TEXT در socat به جای لولهکشی (pipe) آن به tee تحت sudo، متنی را به کمک sudo در یک فایل /proc/sys/ مینویسد.
دستور Socat از یک سازوکار ثبت گزارش استفاده میکند که امکان پالایش پیامها بر اساس سطح اهمیت را فراهم میسازد. سطوح اهمیت ارائهشده کموبیش با اولویتهای متناظر در syslog سازگار هستند. با یک تا چهار بار استفاده از گزینه خط فرمان -d، میتوان پایینترین اولویت پیامهای ارسالی را تعیین کرد. هر پیام شامل یک نویسه بزرگ است که سطح اهمیت پیام را مشخص میکند (یکی از F، E، W، N، I، یا D).
- FATAL:
- شرایطی که نیازمند خاتمه فوری و بیقیدوشرط برنامه است.
- ERROR:
- شرایطی که مانع از اجرای صحیح برنامه میشود. معمولاً برنامه متوقف میشود (گزینه -s را ببینید).
- WARNING:
- چیزی بهدرستی عمل نکرده است یا در وضعیتی قرار دارد که پردازش صحیح پس از آن تضمین نمیشود، اگرچه ممکن است امکانپذیر باشد.
- NOTICE:
- اقدامات قابلتوجه برنامه، برای نمونه جهت نظارت بر socat در وضعیتی مشابه حالت کارساز (server mode).
- INFO:
- شرح کارهایی که برنامه انجام میدهد و احتمالاً چرایی وقوع آنها. امکان پایش چرخه حیات توصیفکنندههای فایل (file descriptors) را فراهم میسازد.
- DEBUG:
- شرح نحوه عملکرد برنامه، تمامی فراخوانیهای سیستمی یا کتابخانهای و نتایج آنها.
پیامهای گزارش میتوانند در stderr، در یک فایل یا در syslog نوشته شوند.
در هنگام خروج، اگر socat بهدلیل EOF یا پایان مهلت عدمفعالیت (inactivity timeout) متوقف شده باشد وضعیت 0، در صورت بروز خطا مقداری مثبت، و در صورت بروز خطای مهلک (fatal error) مقداری منفی بازمیگرداند.
فایلها (FILES)
/usr/bin/socat
/usr/bin/filan
/usr/bin/procan
سیگنالها (SIGNALS)
- SIGUSR1:
- باعث ثبت
آمار فعلی
انتقال در
گزارش
میشود.
همچنین گزینه --statistics را ببینید.
متغیرهای محیطی (ENVIRONMENT VARIABLES)
متغیرهای ورودی اطلاعات را از محیط به socat منتقل میکنند، و متغیرهای خروجی توسط socat برای استفاده در اسکریپتها و برنامههای اجراشده مقداردهی میشوند.
در متغیرهای خروجی که با "SOCAT" آغاز میشوند، این پیشوند در واقع با نام حروف بزرگ فایل اجرایی یا مقدار گزینه -lp جایگزین میشود.
- SOCAT_DEFAULT_LISTEN_IP (ورودی)
- (مقادیر 4 یا 6) نسخه IP مورد استفاده برای آدرسهای listen، recv، و recvfrom را در صورتی که گزینه pf (protocol-family) داده نشده باشد تعیین میکند. توسط گزینههای -4 یا -6 دستور socat بازنویسی میشود.
- SOCAT_PREFERRED_RESOLVE_IP (ورودی)
- (مقادیر 0، 4، یا 6) نسخه IP مورد استفاده هنگام تفکیک نام میزبان مقصد را تعیین میکند، در صورتی که نسخه توسط نوع آدرس، گزینه pf (protocol-family)، یا قالب آدرس مشخص نشده باشد. اگر تفکیک نام مدخل منطبقی را بازنگرداند، نخستین نتیجه (با نسخه IP متفاوت) انتخاب میشود. با مقدار 0، socat همواره اولین رکورد و نسخه IP آن را برمیگزیند.
- SOCAT_MAIN_WAIT (ورودی)
- مدت زمان (به ثانیه) به خواب رفتن فرایند اصلی در آغاز تابع main\() را تعیین میکند. برای اشکالزدایی کاربرد دارد.
- SOCAT_TRANSFER_WAIT (ورودی)
- مدت زمان (به ثانیه) به خواب رفتن فرایند پس از باز کردن آدرسها و پیش از ورود به حلقه انتقال را تعیین میکند. برای اشکالزدایی کاربرد دارد.
- SOCAT_FORK_WAIT (ورودی)
- مدت زمان (به ثانیه) به خواب رفتن فرایندهای والد و فرزند را پس از یک fork() موفقیتآمیز تعیین میکند. برای اشکالزدایی کاربرد دارد.
- SOCAT_VERSION (خروجی)
- دستور socat این متغیر را روی رشته نسخه خود تنظیم میکند؛ برای نمونه "1.7.0.0" برای نسخههای رسمی یا "1.6.0.1+envvar" برای نسخههای موقت؛ میتواند در اسکریپتهای فراخوانیشده توسط socat استفاده شود.
- SOCAT_PID (خروجی)
- دستور socat این متغیر را روی شناسه فرایند (PID) خود تنظیم میکند. در صورت استفاده از گزینه آدرس fork، متغیر SOCAT_PID شناسه فرایند فرزند را دریافت میکند. انشعاب فرایند (forking) برای exec، system، و SHELL مقدار SOCAT_PID را تغییر نمیدهد.
- SOCAT_PPID (خروجی)
- دستور socat این متغیر را روی شناسه فرایند خود تنظیم میکند. در صورت fork، متغیر SOCAT_PPID شناسه pid فرایند اصلی (master) را نگه میدارد.
- SOCAT_PEERADDR (خروجی)
- در آدرسهای سوکت غیرفعال (تمامی آدرسهای LISTEN و RECVFROM)، این متغیر روی رشتهای که آدرس سوکت طرف مقابل (peer) را توصیف میکند تنظیم میشود. اطلاعات درگاه (port) شامل آن نمیشود.
- SOCAT_PEERPORT (خروجی)
- در آدرسهای سوکت غیرفعال مناسب (TCP، UDP، و SCTP - LISTEN و RECVFROM)، این متغیر روی رشتهای حاوی شماره درگاه طرف مقابل تنظیم میشود.
- SOCAT_SOCKADDR (خروجی)
- در تمامی آدرسهای LISTEN، این متغیر روی رشتهای که آدرس سوکت محلی را توصیف میکند تنظیم میشود. اطلاعات درگاه گنجانده نمیشود.
- SOCAT_SOCKPORT (خروجی)
- در آدرسهای TCP-LISTEN، UDP-LISTEN، و SCTP-LISTEN، این متغیر روی درگاه محلی تنظیم میشود.
- SOCAT_TIMESTAMP (خروجی)
- در تمامی آدرسهای RECVFROM که گزینه آدرس so-timestamp در آنها اعمال شده است، socat این متغیر را روی برچسب زمانی حاصل تنظیم میکند.
- SOCAT_IP_OPTIONS (خروجی)
- در تمامی آدرسهای RECVFROM مبتنی بر IPv4 که گزینه آدرس ip-recvopts در آنها اعمال شده است، socat این متغیر را با گزینههای IP بسته دریافتی پر میکند.
- SOCAT_IP_DSTADDR (خروجی)
- در تمامی آدرسهای RECVFROM مبتنی بر IPv4 که گزینه آدرس ip-recvdstaddr (در BSD) یا ip-pktinfo (در سایر پلتفرمها) در آنها اعمال شده است، socat این متغیر را روی آدرس مقصد بسته دریافتی تنظیم میکند. این متغیر بهویژه برای شناسایی بستههای آدرسدهیشده همگانی (broadcast) و چندپخشی (multicast) مفید است.
- SOCAT_IP_IF (خروجی)
- در تمامی آدرسهای RECVFROM مبتنی بر IPv4 که گزینه آدرس ip-recvif (در BSD) یا ip-pktinfo (در سایر پلتفرمها) در آنها اعمال شده است، socat این متغیر را روی نام رابطی که بسته از آن دریافت شده است تنظیم میکند.
- SOCAT_IP_LOCADDR (خروجی)
- در تمامی آدرسهای RECVFROM مبتنی بر IPv4 که گزینه آدرس ip-pktinfo در آنها اعمال شده است، socat این متغیر را روی آدرس رابطی که بسته از آن دریافت شده تنظیم میکند.
- SOCAT_IP_TOS (خروجی)
- در تمامی آدرسهای RECVFROM مبتنی بر IPv4 که گزینه آدرس ip-recvtos در آنها اعمال شده است، socat این متغیر را روی TOS (نوع سرویس) بسته دریافتی تنظیم میکند.
- SOCAT_IP_TTL (خروجی)
- در تمامی آدرسهای RECVFROM مبتنی بر IPv4 که گزینه آدرس ip-recvttl در آنها اعمال شده است، socat این متغیر را روی TTL (طول عمر) بسته دریافتی تنظیم میکند.
- SOCAT_IPV6_HOPLIMIT (خروجی)
- در تمامی آدرسهای RECVFROM مبتنی بر IPv6 که گزینه آدرس ipv6-recvhoplimit در آنها اعمال شده است، socat این متغیر را روی مقدار hoplimit بسته دریافتی تنظیم میکند.
- SOCAT_IPV6_DSTADDR (خروجی)
- در تمامی آدرسهای RECVFROM مبتنی بر IPv6 که گزینه آدرس ipv6-recvpktinfo در آنها اعمال شده است، socat این متغیر را روی آدرس مقصد بسته دریافتی تنظیم میکند.
- SOCAT_IPV6_TCLASS (خروجی)
- در تمامی آدرسهای RECVFROM مبتنی بر IPv6 که گزینه آدرس ipv6-recvtclass در آنها اعمال شده است، socat این متغیر را روی کلاس انتقال بسته دریافتی تنظیم میکند..IP
- SOCAT_OPENSSL_X509_ISSUER (خروجی)
- فیلد Issuer از گواهی طرف مقابل (peer)
- SOCAT_OPENSSL_X509_SUBJECT (خروجی)
- فیلد Subject از گواهی طرف مقابل
- SOCAT_OPENSSL_X509_COMMONNAME (خروجی)
- مدخلهای commonName از موضوع (subject) گواهی طرف مقابل. مقادیر چندگانه با " // " از یکدیگر جدا میشوند.
- SOCAT_OPENSSL_X509_* (خروجی)
- تمام مدخلهای دیگر از موضوع (subject) گواهی طرف مقابل
- SOCAT_OPENSSL_X509V3_DNS (خروجی)
- مدخلهای DNS از افزونههای (extensions) گواهی طرف مقابل - فیلد subjectAltName. مقادیر چندگانه با " // " از یکدیگر جدا میشوند.
- HOSTNAME (ورودی)
- برای تعیین نام میزبان جهت ثبت وقایع (لاگگیری) استفاده میشود (به -lh مراجعه کنید).
- LOGNAME (ورودی)
- اگر هیچ socksuser
مشخص نشده
باشد، به
عنوان نام
کاربری
کلاینت socks
استفاده
میشود.
با گزینههای su و su-d، متغیر LOGNAME روی نام کاربری دادهشده تنظیم میشود. - USER (ورودی)
- اگر هیچ socksuser
مشخص نشده
باشد و LOGNAME
خالی باشد،
به عنوان
نام کاربری
کلاینت socks
استفاده
میشود.
با گزینههای su و su-d، متغیر USER روی نام کاربری دادهشده تنظیم میشود. - SHELL (خروجی)
- با گزینههای su و su-d، متغیر SHELL روی پوستهٔ ورود (login shell) کاربر دادهشده تنظیم میشود.
- PATH (خروجی)
- میتواند با گزینهٔ path برای نشانیهای exec، system و SHELL تنظیم شود.
- HOME (خروجی)
- با گزینههای su و su-d، متغیر HOME روی دایرکتوری خانگی کاربر دادهشده تنظیم میشود.
قدردانیها (CREDITS)
تلاشها و آثار گروهها و سازمانهای زیر برای این پروژه بسیار ارزشمند بوده است:
پروژهٔ FSF (GNU، http://www.fsf.org) با نرمافزارهای توسعهٔ آزاد و چندسکویی خود و انبوهی از ابزارها و کتابخانههای مفید دیگر.
جامعهٔ توسعهدهندگان لینوکس (http://www.linux.org) برای فراهم ساختن یک سیستمعامل آزاد و متنباز.
گروه Open Group (http://www.unix-systems.org) برای در دسترس قرار دادن رایگان مشخصات استاندارد خود در اینترنت.
نسخه (VERSION)
این صفحهٔ راهنما نسخهٔ 1.8.1 از socat را شرح میدهد.
گزارش باگها (BUGS)
نشانیها نمیتوانند تودرتو باشند، بنابراین یک فرایند منفرد socat نمیتواند، به عنوان مثال، ssl را روی socks اجرا کند.
گزینهٔ نشانی ftruncate بدون مقدار، به جای 0 از مقدار پیشفرض 1 استفاده میکند.
حالتهای پرگویی (-x و/یا -v) در هنگام استفاده از گزینههای نشانی cr یا crnl، نویسههای پایان خط را به طور ناهماهنگ نمایش میدهند: آنها دادهها را در هر دو جهت، پس از تبدیل نشان میدهند.
تنظیم اندازه بلوک انتقال داده (-b) با نشانی readline نادیده گرفته میشود.
گزارش باگها را به <socat@dest-unreach.org> ارسال کنید.
nc(1), rinetd(8), openssl(1), stunnel(8), rlwrap(1), setsid(1)
صفحه اصلی Socat http://www.dest-unreach.org/socat
نویسنده (AUTHOR)
Gerhard Rieger <rieger@dest-unreach.org> و مشارکتکنندگان