עבור לתוכן

בעיה בפתיחת פורטים בפיירוול

Featured Replies

פורסם

שלום!!

פתחתי פורטים ואני צריך לפתוח אותם גם בפיירוול.

הבעיה היא שזה טווח של פורטים (6500-7000) ולא פורטים בודדים....

איך אני עושה פתיחה של טווח של פורטים בפיירוול (של הווינדווס)?

תודה

פורסם

החדשות הרעות הם שהפיירוול של XP לא מאפשר לפתוח טווח של פורטים.

החדשות הטובות הם שגם אני נתקלתי בערך באותה בעיה די מזמן כשהייתי צריך לפתוח טווח של בערך 150 פורטים

על 25 מחשבים, בדקתי וגיליתי ש netsh מאפשר לפתוח פורטים, אז כתבתי סקריפט ב AutoIt שמאפשר לי

לפתוח טווח של פורטים.

הנה הקוד מקור:

#cs ----------------------------------------------------------------------------

‎15:22 ‎21/‎11/‎2006

Script Function:
Open a range of ports on windows firewall using
the "netsh firewall add portopening" command.

#ce ----------------------------------------------------------------------------

#include <GuiConstants.au3>
#NoTrayIcon

Dim $action
Dim $protocol;

Dim $ports;
Dim $first_port;
Dim $last_port;

Dim $i = 0;

Dim $name = "netsh_script";
Dim $mode;

Dim $progressbar;


if $CmdLine[0] < 3 Then
DisplayHelp();
Exit(1);
EndIf

$action = StringLower ($CmdLine[1]);

If $action <> "add" AND $action <> "delete" Then
DisplayHelp();
Exit(1);
EndIf


$protocol = StringUpper ($CmdLine[2]);

if $protocol <> "TCP" AND $protocol <> "UDP" AND $protocol <> "ALL" Then
DisplayHelp();
Exit(1);
Endif

$ports = StringSplit ($CmdLine[3],"-");

If NOT ( StringIsInt ($ports[0]) OR StringIsInt ($ports[1]) ) Then
DisplayHelp();
Exit(1);
Endif

$first_port = Int ($ports[1]);
$last_port = Int ($ports[2]);

If ( ($first_port <= 0 OR $first_port > 65535) OR ($last_port <= 0 OR $first_port > 65535) ) OR ($first_port >= $last_port) Then
DisplayHelp();
Exit(1);
Endif

If $CmdLine[0] > 3 Then $name = $CmdLine[4];

If $CmdLine[0] > 4 Then $mode = StringUpper ($CmdLine[5]);

if $mode <> "ENABLE" AND $mode <> "DISABLE" Then $mode = "ENABLE";


; GUI
GuiCreate("Script Progress", 500, 40);
$progressbar = GUICtrlCreateProgress (10,10,480,20);
GUISetState(@SW_SHOW);


If $action == "add" Then

Do

RunWait (@ComSpec & " /C netsh firewall "&$action&" portopening "& $protocol & " " & ($first_port + $i) & " " & $name & " " & $mode ,"", @SW_HIDE);

$i += 1;

GUICtrlSetData ($progressbar, ($i / ($last_port - $first_port))*100 );

Until $first_port + $i > $last_port

Else

Do


RunWait (@ComSpec & " /C netsh firewall "&$action&" portopening "& $protocol & " " & ($first_port + $i) ,"", @SW_HIDE);

$i += 1;

GUICtrlSetData ($progressbar, ($i / ($last_port - $first_port))*100 );

Until $first_port + $i > $last_port


Endif


MsgBox (64,"Done","Done! ");



Func DisplayHelp()
MsgBox(64, "Help", "syntax: <Action> <Protocol> <Port Range> [<Name> <Mode>]" & @CRLF & @CRLF & _
"Action: ADD/DELETE." & @CRLF & _
"Protocol: TCP / UDP / ALL." & @CRLF & _
"Port: FirstPort-LastPort (no space), for example: 1024-1066)." & @CRLF & _
"Name: Rule name (no space), Only valid when you ADD a rule." & @CRLF & _
"Mode: ENABLE(default)/DISABLE - Enable or disable the rule (optional)," & @CRLF & _
" Only valid when you ADD a rule." & @CRLF & @CRLF & _
"Examples:" & @CRLF & @CRLF & _
'ADD UDP 1060-1065 "UDP_ports" ENABLE' & @CRLF & _
'ADD TCP 1500-1600 "TCP_ports" ENABLE' & @CRLF & @CRLF & _
"DELETE UDP 1060-1065" & @CRLF & _
"DELETE UDP 1500-1600" _
);



EndFunc

זה דוגמא מצוינת לקוד מהיר ומלוכלך, אבל הוא עבד לי מצוין.

הבעיה היחידה היא שהוא מאוד לא יעיל ואיטי, בגלל שהייתי עצלן מדי לכתוב ל STDIN של netsh ובמקום זה

כל פורט שאני פותח אני קורא ל CMD שיפעיל את netsh עם הפרמטרים הנכונים, ואז חוזר על התהליך שוב ושוב ושוב...

לכן לפתוח עם הסקריפט הזה טווח של 500 פורטים יקח לפחות 20-25 דקות, אבל זה לא ביג דיל כי הוא לא תופס

כלכך הרבה CPU , פשוט תן לו לעבוד ברקע.

השימוש בו ממש פשוט, אם תפעיל אותו בלי פרמטרים תקבל הודאת עזרה (זה יותר תזכורת עצמית מאשר עזרה, כי במקור כתבתי אותו לעצמי...) :

helpta3.gif

בקיצור אם אתה רוצה לפתוח פורטים 6500-7000 TCP אז תן לו את הפרמטרים האלה:

add TCP 6500-7000 "Name"

אם זה UDP אז:

add UDP 6500-7000 "Name"

ואם זה גם וגם אז:

add ALL 6500-7000 "Name"

רק במקום Name תכניס שם מסויים. ועכשיו תן לו לרוץ...

ברקע יופיע לך progress bar שיראה לך כמה הוא כבר עשה:

progmo3.gif

ובסוף תקבל הודאה, זה הכל.

אגב אם אין לך כוח לקמפל את הקוד, צירפתי קובץ ZIP שיש בו את המקור וה EXE .

[attachment deleted by admin]

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים