الفرق بين char و unsigned char في لغة C

السلام عليكم و رحمة الله
صادفت في قرائتي لهذه الشفرة التعليق التالي:

/*
 * Encrypt *len bytes of data
 * All data going in & out is considered binary (unsigned char[])
 */

المعنى من هذا التعليق هو أن البيانات ستكون من نوع ثنائي، أي شيء كملف صورة أو شيء آخر. فظننت أن unsigned char تستعمل في تمثيل البيانات الثنائية، قمت بعمل بحث في الإنترنيت فوجدت الآتي:

“There’s no dedicated “character type” in C language. char is an integer type, same (in that regard) as int, short and other integer types. char just happens to be the smallest integer type. So, just like any other integer type, it can be signed or unsigned.
It is true that (as the name suggests) char is mostly intended to be used to represent characters. But characters in C are represented by their integer “codes”, so there’s nothing unusual in the fact that an integer type char is used to serve that purpose.”

خلاصة القول أنه لا يوجد نوع بيانات خاص يمثل الحروف كما كنا نعتقد في C، بل إن النوع char هو في الأصل نوع ينتمي للأعداد الصحيحة. و الحروف في لغة C تمثل بأرقام ASCI و النوع char صادف أنه أصغر نوع من ناحية الحجم في الذاكرة.
تعليق آخر:

“ You should use unsigned char. The C99 standard says that unsigned char is the only type guaranteed to be dense (no padding bits), and also defines that you may copy any object (except bitfields) exactly by copying it into an unsigned char array, which is the object representation in bytes.
The sensible interepretation of this is to me, that if you use a pointer to access an object as bytes, you should use unsigned char.”

قبل أن نشرح التعليق علينا أولا أن نتذكر كيف يتم تمثيل البيانات في المتغيرات، لنفرض أنه لدينا متغير من نوع int ذو حجم 4 بايت أي 4 * 8 بت:

int num = 457;

المتغير num سيكون كالآتي في الذاكرة:

00000000 00000000 00000000 00000000 

أما تمثيل الرقم 457 سيكون كالآتي:

 00000000 00000000 00000001 11001001

أحيانا يتم عمل padding أو ما يعرف ب “ملئ الباقي” أي أنه البايتات الباقية يتم إضافة لها 0، أكيد في حالة الأرقام هذا لا يضر لأن الصفر من جهة اليسار يلغى كمثالنا السابق لكن في حالة البيانات الثنائية و خاصة إن كنا سنكتب في ملف فإن هذا سيشكل فرق، هنا نرجع إلى ترجمة التعليق السابق الذي يقول فيه أن لغة C تضمن لك أنه لن يتم تطبيق أي padding أو ملئ البايتات الباقية في حالة متغير من نوع unsigned char.

التصنيفات :برمجة الوسوم:

طريقة نقل الملفات من جهازك إلى خادمك بإستخدام scp

السلام عليكم و رحمة الله
لنفرض أنك تود نقل ملفاتك إلى سيرفرك، سيتبادر لك SSH، لكن كيف؟ الحل معscp أو (secure copy)، بالعربية النقل الآمن.
هذه الأداة تتيح لك نقل ملفات من حاسوبك إلى الخادم بشكل مشفر عن طريق بروتوكول SSH، يمكنك أيضا نقل بيانات من خادم إلى خادم من دون حتى تنزيل الملفات إلى جهازك ثم رفعها إلى الخادم الآخر.
Scp بعدة خيارات أهمها:
P: منفذ الخادم الذي سنتصل به، عادة 22.
r: هذه مفيدة إن كان لديك مجلد بداخله عدة ملفات و تريد نقلها مرة واحدة.
أمثلة:
لنفرض هنا أنك تود نقل ملف index.html من جهازك إلى خادمك:

scp index.html sshuser@192.168.1.5:/htdocs/www/

إستبدل sshuser بإسم الحساب الذي يملك الصلاحيات الولوج بإستخدام SSH، بعدها إستبدل /htdocs/www/ بالمسار الذي تريد نسخ الملفات إليه.

scp -r mysite sshuser@192.168.1.5:/htdocs/www/

إن كنت تود نقل جميع الملفات الموجودة في المجلد mysite إستخدام r. لاحظ أن المجلد mysite سيتم إستحداثه أيضا في المسار /htdocs/www/ أي في الأخير سيكون لديك: /htdocs/www/mysite/.

scp -r mysite/* sshuser@192.168.1.5:/htdocs/www/

نفس سابق الأمر لكن هذه المرة سيتم نسخ محتويات المجلد mysite مباشرة إلى /htdocs/www/، أي أن المجلد mysite لو كان يحتوي على الملفات التالية:

mysite/
index.html
main.css
main.js

فإن المجلد /htdocs/www/ سيكون كالآتي:

/htdocs/www/
index.html
main.css
main.js

لو كان خادم SSH يتنصت على منفذ غير 22، قم بتعيينه بواسطة P.

scp -P 12345 index.html sshuser:/htdocs/www/

لو اردت مثلا نقل ملف/مجلد من خادم إلى خادم آخر دون الحاجة إلى تنزيلها إلى جهازك و بعدها رفعها إلى الخادم الآخر:

scp -r sshuser@192.168.1.5:/home/u245/mysite/* sshuser2@192.168.1.8:/htdocs/www/

مصادر:
SCP Introduction

التصنيفات :أنظمة يونكس الوسوم:, ,

رسالة الخطأ SVN: This client is too old to work with working copy

السلام عليكم و رحمة الله و بركاته

أثناء تحديث Metasploit 4 تأتيني هذه الرسالة:

root@bt:/opt/msf4# msfupdate
svn: This client is too old to work with working copy '.'.  You need
to get a newer Subversion client, or to downgrade this working copy.
See http://subversion.tigris.org/faq.html#working-copy-format-change
for details.

بعد البحث وجدت أن إصدارة subversion تغيرت و عليه يجب التحويل من الإصدارة القديمة إلى الإصدارة الجديدة، كيف ذلك؟ الحل مع هذا السكريبت change-svn-wc-format.py،
قم أولا بتحميله :

root@bt:/opt# wget https://svn.apache.org/repos/asf/subversion/trunk/tools/client-side/change-svn-wc-format.py

بعدها قم نبتشغيله كالآتي:

root@bt:/opt# python change-svn-wc-format.py /pentest/exploits/framework/ 1.5

ستضهر الرسالة التالية:

Converted WC at '/pentest/exploits/framework/' into format 9 for Subversion 1.5

الآن يمكنك تحديث ال Metasploit:

root@bt:/opt# cd framework
root@bt:/opt/framework# msfupdate
[*]
[*] Attempting to update the Metasploit Framework...
[*]
<strong>

 

التصنيفات :أنظمة يونكس الوسوم:

ترقية نواة FreeBSD

السلام عليكم و رحمة الله و تعالى و بركاته

من حين إلى الآخر يصدر فريق تطوير نواة FreeBSD تحديثات للنواة، عادة تكون لمزايا جديدة في النواة أو/و تصحيح لعلل، حذف لأشياء لم تعد ضرورية و أحيانا أخرى ترقيعات أمنية لكن هذا يكون نادرا.

لتحديث النواة هناك طريقتان:

  • الترقية عبر الأنترنيت:

في هذه الطريقة نقوم بتحديث النواة مباشرة من الأنترنيت، عادة هذه ينصح بها من لديه خادم أو لديه عتاد متواضع من ناحية المواصفات، أكيد أنه لا أحد يريد ترقية النظام في 5 أيام :D.

  • الترقية من الملفات المصدرية:

في هذه الطريقة نقوم أولا بتحميل الشيفرة المصدرية للنواة بعدها نقوم بترجمة النواة، ينصح بهذه الطريقة لمن لديه جهاز بمواصفات قوية، عادة ترجمة النواة تأخذ من 20د إلى 3 ساعات، هذا على حسب مواصفات الجهاز و حسب طريقتك لإعداد النواة، كلما حذفت خصائص/ تعريفات لاتحتاجها من النواة كلما كان ترجمة النواة أسرع.

أنواع النواة:

RELEASE: هذه النواة الرسمية، عادة التحديثات تكون أمنية لكن المميزات الجديدة تكون متأخرة بنظرتيها STABLE و CURRENT.

STABLE: هذه النواة تعرف بأنها مستقرة و تحوي آخر التحديثات.

CURRENT: مثل سابقتها لكنها ليست مستقرة تماما، ينصح بها للتجربة فقط.

الآن بعد أن عرفنا الفرق، سننتقل إلى تحديث النواة من الأنترنيت:

سنقوم بفتح الملف الآتي:

# ee /etc/freebsd-update.conf

أهم الأسطر هي التالية:

KeyPrint 800651ef4b4c71c27e60786d7b487188970f4b4169cc055784e21eb71d410cc5

لاتقم بتغييرها.

ServerName update.FreeBSD.org

يمكنك أن تغيرها إلى السيرفر الأقرب لك.

Components src world kernel

أجزاء النظام التي تريد تحديثها، حيث:

src: الشيفرة المصدرية للنظام، المجلد الذي يحتوي الشيفرة يكون عادة usr/src/.

world: أجزاء النظام الأساسية مثل البرامج أمثال ps,kill, ls.

kernel: النواة نفسها.

يمكنك أن تتخلى عن src لكن من المستحسن جدا الإبقاء على world وkernel.

# freebsd-update fetch

نقوم بتنزيل التحديثات.

# freebsd-update install

بعدها تنصيب التحديثات.

في حالة وجود أي مشكل أو لو أردت مثلا الرجوع إلى الإصدارة السابقة ما علينا سوى كتابة الآتي:

# freebsd-update rollback

بالنسبة لتحديث النواة من الشيفرة المصدرية فعلينا أولا تنزيل الشيفرة بإستخدام cvsup أو subversion في حالتنا هذه سنأخذ cvsup لبساطته، بعدها نقوم بترجمة النواة.

أولا تنصيب cvsup إن لم يكن منصبا:

# cd /usr/ports/net/cvsup
# make install clean

بعدها تعديل الملف stable-supfile:

# cd /usr/share/examples/cvsup
# ee stable-supfile

هذه أهم الأسطر في هذا الملف، يمكنك وضعها في ملف جديد و حفظها، الآن نأتي للشرح:

*default host=cvsup5.de.freebsd.org

إختر أقرب سيرفر لك.

*default base=/var/db
*default prefix=/usr

أين يتم حفظ الشيفرة المصدرية للنظام.

*default release=cvs tag=RELENG_9

الإصدارة التي تريد الترقية إليها، إن قمت بوضع RELENG_ فإن آخر إصدارة STABLE سيتم الترقية إليها، أي مثلا لو كانت النواة تحمل الإصدارة 8.1 و قمنا بالتحديث الآن فإننا سنجد أنفسنا في الإصدارة 9.1(حاليا هذه آخر إصدارة من النظام).

إما إن كنا نريد الترقية إلى إصدارة معينة فإننا نضيف الآتي:

*default release=cvs tag=RELENG_9 _X

X هو رقم الإصدارة التي نريدها.

*default delete use-rel-suffix
src-all

نريد تحديث جميع أجزاء النظام، الآن قم بالضغط على CTRL+c أكتب exit.

الآن تنزيل النواة:

# cvsup  stable-supfile
Connected to cvsup.freebsd.org
Updating collection src-all/cvs
Edit src/LASTCOMMIT.txt
Edit src/Makefile.inc1
Edit src/UPDATING
Edit src/cddl/contrib/opensolaris/cmd/zdb/zdb.c
Checkout src/contrib/openbsm/bin/auditdistd/trail.c
Checkout src/contrib/openbsm/bin/auditdistd/trail.h
Checkout src/contrib/openbsm/bin/auditdistd/unlinkat.h
Edit src/contrib/openbsm/bin/auditfilterd/Makefile.am
Edit src/contrib/openbsm/bin/auditreduce/Makefile.in
Edit src/contrib/openbsm/bin/auditreduce/auditreduce.1
Edit src/contrib/openbsm/bin/praudit/Makefile.am
Delete src/share/man/man4/harp.4
Delete src/share/man/man4/hfa.4
Delete src/share/man/man4/idt.4
…

هذه العملية تستغرق وقتا نوعا ما، على حسب سرعة إتصالك.

الآن ترجمة النواة:

# cd /usr/src
# make buildkernel
# make installkernel
# reboot<p align="LEFT">

ملاحظة: جميع الأوامر السابقة تنفذ بصلاحيات مدير نظام(root)، نسيت أن أذكرها من البداية :D.

التصنيفات :أنظمة يونكس الوسوم:, , ,

عيد مبارك للجميع

السلام عليكم و رحمة الله و بركاته
عيدكم مبارك و كل عام و أنتم بخير، و للحجاج حج مبرور و ذنب مغفور و سعي مشكور، و من لم يحج هذا العام نسأل المولى عزوجل الذهاب العام القادم بإذنه.
لإخوتنا في فلسطين و العراق و سائر بلاد المسلمين و جميعهم الثبات و الصبر و الفرج العاجل.

التصنيفات :عام

الرحيل إلى عالم المصادر المفتوحة عبر طريق FreeBSD

السلام عليكم و رحمة الله و بركاته

ملاحظة: هذه المقالة ترجمة لفكرة الأخ محمد الخطاب، فجزيل الشكر له

في هذه المقالة سنشرح إن شاء الله طريقة التحول من عالم الwindows إلى عالم المصادر المفتوحة، حيث سنتناول كيفية التحول بالنسبة لمن ليس لديهم أي خبرة سابقة غير أنظمة windows و لمن لديهم خبرة في أنظمة أخرى، أيضا سنتناول التضحيات و التنازلات التي ستأخذ، في الأخير هذه كانت تجربتي و لا يجب أخذ الإرشادات هنا على أساس أنها الطريقة المثلى.

إن كانت هذه أول مرة لك تريد فيها أن تجرب نظاما غير نظام windows فإنه عليك أولا أن تجمع أهم المعلومات حول النظام الذي تريد الرحيل إليه حتى تجعلها عدة في متاع سفرك، بالنسبة لنا، فإننا نريد الرحيل إلى عالم FreeBSD، لذا علينا نجيب عن أهم الأسئلة التالية:

قراءة المزيد…

التصنيفات :أنظمة يونكس الوسوم:, ,

جلب معلومات عن بطاقات الشبكة المتوفرة في جهازك بالسي، الجزء الثاني FreeBSD

السلام عليكم و رحمة الله و بركاته

في المرة السابقة رأينا كيف نقول بجلب قائمة ببطاقات الشبكة المتوفرة في Linux، هذه المرة سنقوم بنفس العمل في FreeBSD حيث أن الإختلاف ليس كبير سوى في ال struct ifaddrs تختلف فيه بعض عناصره في التسمية، يكون struct ifaddrs في FreeBSD كالتالي:

قراءة المزيد…

التصنيفات :أنظمة يونكس الوسوم:, , , ,

جلب معلومات عن بطاقات الشبكة المتوفرة في جهازك بالسي، الجزء الأول Linux

السلام عليكم و رحمة الله و بركاته

اليوم سنتحدث عن طريقة جلب قائمة لبطاقات الشبكة المتوفرة في الجهاز، عادة نكون نملك واحدة فقط لكن بالنسبة لمن لديهم خادم في المنزل أو في العمل فسيكون هناك على الأقل بطاقتين، ما يهمنا من جلب العلومات هنا هو معرفة رقم الأيبي للبطاقة و كذا العنوان الفيزيائي(MAC Address) بالإضافة إن كانت البطاقة تعمل(up) أو ليست في حالة عمل(down) و ليست معطلة :D.

تحتفظ النواة بسلسلة مترابطة(linked list) على مستوى الذاكرة لجميع معلومات بطاقات الشبكة المتوفرة على الجهاز، كل عقدة في هذه السلسلة تحتوي على struct ifaddrs يحوي جميع معلومات بطاقة الشبكة، شكله العام كالتالي:

قراءة المزيد…

التصنيفات :برمجة الوسوم:, ,

كتاب GNU/Linux Advanced Administration في طريقه إلى الترجمة، هل من داعمين

السلام عليكم و رحمة الله و بركاته و تعالى

سيقوم الأخ عبدالرحيم الفاخوري (مشرف في منتدى مجتمع لينكس العربي) إن شاء الله بترجمة كتاب GNU/Linux Advanced Administration، ليقوم بهذا الأخ عبدالرحيم يفكر بترك عمله ليتفرغ لترجمة الكتاب، إن توفرت على الأقل 80% من مبلغ قدره 1300 دولار يتم جمعها عبر متبرعين، أنقل لكم ما قاله:

قراءة المزيد…

التصنيفات :عام

تعطيل الجدار الناري في CentOS6/RHEL6

السلام عليكم و رحمة الله

إن كنت لاتحتاج إلى الجدار الناري لسبب أو آخر و أنت تعمل على إحدى توزيعات عائلة RedHat فقم بتشغيل واجهة سطر الأوامر و انت بصلاحيات مدير قم بالآتي:

قراءة المزيد…