PDA

View Full Version : پند سوال در مورد برنامه های تحت شبکه



mohsen_metn
شنبه 20 شهریور 1389, 22:52 عصر
سلام
من قراره یه برنامه تحت شبکه بنویسم .در یه سری از موارد مشکل دارم.چند تا از سوال ها رو توی همین سایت پیدا کردم. مثل پیدا کردن کامپیوتر های داخل شبکه
چند تا سوال دیگه دارم:

نحوه خاموش کردن کامپیوتر های داخل شبکه از طریق کد
قطع ارتباط کامپیوتر های شبکه از طریق کد
قطع اینترنت کامپیوتر های شبکه از طریق کد
دادن دسترسی در مورد دانلود کامپیوتر های شبکه از طریق کد

AliRezaPro
دوشنبه 22 شهریور 1389, 16:59 عصر
نحوه خاموش کردن کامپیوتر های داخل شبکه از طریق کد



using System.Management;

public class Win32OperatingSystem
{
public static void Shutdown(string machineName, string username, string password)
{
ManagementScope Scope = null;
ConnectionOptions ConnOptions = null;
ObjectQuery ObjQuery = null;
ManagementObjectSearcher ObjSearcher = null;
try
{
ConnOptions = new ConnectionOptions();
ConnOptions.Impersonation = ImpersonationLevel.Impersonate;
ConnOptions.EnablePrivileges = true;
//local machine
if (machineName.ToUpper() == Environment.MachineName.ToUpper() )
Scope = new ManagementScope(@"\ROOT\CIMV2", ConnOptions);

else
{
//remote machine
ConnOptions.Username = username;
ConnOptions.Password = password;
Scope = new ManagementScope(@"\\" + machineName + @"\ROOT\CIMV2", ConnOptions);
}
Scope.Connect();
ObjQuery = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
ObjSearcher = new ManagementObjectSearcher(Scope, ObjQuery );
foreach( ManagementObject operatingSystem in ObjSearcher.Get())
{
MessageBox.Show("Caption = " + operatingSystem.GetPropertyValue("Caption"));
MessageBox.Show("Version = " + operatingSystem.GetPropertyValue("Version"));
ManagementBaseObject outParams = operatingSystem.InvokeMethod ("Shutdown",null,null);

}
}
catch (Exception ex)
{
throw ex;
}
}
}

برای کال کردن

[STAThread]
static void Main(string[] args)
{
Win32OperatingSystem.Shutdown(@"Machinename", @"UserName", @"Pwd");
}

قطع ارتباط کامپیوتر های شبکه از طریق کد
دقیقا منظورتون چیه؟

قطع اینترنت کامپیوتر های شبکه از طریق کد

using System;
using System.Collections;
using System.Runtime.InteropServices;

///

/// This is a class for disconnecting TCP connections.

/// You can get a list of all connections and close by a connection, localIP,

/// remoteIP, localPort and remotePort.

///

public class Disconnecter {

//Enumeration of the states
public enum State{
All=0,
Closed=1,
Listen=2,
Syn_Sent=3,
Syn_Rcvd=4,
Established=5,
Fin_Wait1=6,
Fin_Wait2=7,
Close_Wait=8,
Closing=9,
Last_Ack=10,
Time_Wait=11,
Delete_TCB=12

}

//Connection info
private struct MIB_TCPROW{
public int dwState;
public int dwLocalAddr;

public int dwLocalPort;

public int dwRemoteAddr;

public int dwRemotePort;

}

//API to get list of connections

[DllImport("iphlpapi.dll")]

private static extern int GetTcpTable(IntPtr pTcpTable,ref int pdwSize,bool bOrder);

//API to change status of connection

[DllImport("iphlpapi.dll")]

//private static extern int SetTcpEntry(MIB_TCPROW tcprow);
private static extern int SetTcpEntry(IntPtr pTcprow);

//Convert 16-bit value from network to host byte order

[DllImport("wsock32.dll")]

private static extern int ntohs(int netshort);

//Convert 16-bit value back again

[DllImport("wsock32.dll")]

private static extern int htons(int netshort);

//Close all connection to the remote IP

public static void CloseRemoteIP(string IP){

MIB_TCPROW[] rows = getTcpTable();

for(int i=0; i

if(rows[i].dwRemoteAddr==IPStringToInt(IP)){

rows[i].dwState = (int) State.Delete_TCB;
IntPtr ptr = GetPtrToNewObject(rows[i]);
int ret = SetTcpEntry(ptr);
}
}
}
//Close all connections at current local IP
public static void CloseLocalIP(string IP){
MIB_TCPROW[] rows = getTcpTable();
for(int i=0; i
if(rows[i].dwLocalAddr==IPStringToInt(IP)){
rows[i].dwState = (int) State.Delete_TCB;
IntPtr ptr = GetPtrToNewObject(rows[i]);
int ret = SetTcpEntry(ptr);
}
}
}
//Closes all connections to the remote port
public static void CloseRemotePort(int port){
MIB_TCPROW[] rows = getTcpTable();
for(int i=0; i
if(port==ntohs(rows[i].dwRemotePort)){
rows[i].dwState = (int) State.Delete_TCB;
IntPtr ptr = GetPtrToNewObject(rows[i]);
int ret = SetTcpEntry(ptr);
}
}
}
//Closes all connections to the local port
public static void CloseLocalPort(int port){
MIB_TCPROW[] rows = getTcpTable();
for(int i=0; i
if(port==ntohs(rows[i].dwLocalPort)){
rows[i].dwState = (int) State.Delete_TCB;
IntPtr ptr = GetPtrToNewObject(rows[i]);
int ret = SetTcpEntry(ptr);
}
}
}
//Close a connection by returning the connectionstring
public static void CloseConnection(string connectionstring){
try{
//Split the string to its subparts
string[] parts = connectionstring.Split('-');
if(parts.Length!=4) throw new Exception("Invalid connectionstring - use the one provided by Connections.");
string[] loc = parts[0].Split(':');
string[] rem = parts[1].Split(':');
string[] locaddr = loc[0].Split('.');
string[] remaddr = rem[0].Split('.');
//Fill structure with data
MIB_TCPROW row = new MIB_TCPROW();
row.dwState = 12;
byte[] bLocAddr = new byte[]{byte.Parse(locaddr[0]),byte.Parse(locaddr[1]),byte.Parse(locaddr[2]),byte.Parse(locaddr[3])};
byte[] bRemAddr = new byte[]{byte.Parse(remaddr[0]),byte.Parse(remaddr[1]),byte.Parse(remaddr[2]),byte.Parse(remaddr[3])};
row.dwLocalAddr = BitConverter.ToInt32(bLocAddr,0);
row.dwRemoteAddr = BitConverter.ToInt32(bRemAddr,0);
row.dwLocalPort = htons(int.Parse(loc[1]));
row.dwRemotePort = htons(int.Parse(rem[1]));
//Make copy of the structure into memory and use the pointer to call SetTcpEntry
IntPtr ptr = GetPtrToNewObject(row);
int ret = SetTcpEntry(ptr);
if(ret==-1) throw new Exception("Unsuccessful");
if(ret==65) throw new Exception("User has no sufficient privilege to execute this API successfully");
if(ret==87) throw new Exception("Specified port is not in state to be closed down");
if(ret!=0) throw new Exception("Unknown error ("+ret+")");
}catch(Exception ex){

throw new Exception("CloseConnection failed ("+connectionstring+")! ["+ex.GetType().ToString()+","+ex.Message+"]");
}

}
//Gets all connections
public static string[] Connections(){
return Connections(State.All);
}

//Gets a connection list of connections with a defined state

public static string[] Connections(State state){

MIB_TCPROW[] rows = getTcpTable();

ArrayList arr = new ArrayList();

foreach(MIB_TCPROW row in rows){

if(state == State.All || state == (State)row.dwState){

string localaddress = IPIntToString(row.dwLocalAddr) +":"+ ntohs(row.dwLocalPort);
string remoteaddress = IPIntToString(row.dwRemoteAddr) + ":" + ntohs(row.dwRemotePort);
arr.Add(localaddress + "-" + remoteaddress + "-" + ((State)row.dwState).ToString() + "-" + row.dwState);

}
}

return (string[])arr.ToArray(typeof(System.String));

}

//The function that fills the MIB_TCPROW array with connectioninfos

private static MIB_TCPROW[] getTcpTable(){

IntPtr buffer = IntPtr.Zero; bool allocated=false;

try{

int iBytes=0;
GetTcpTable(IntPtr.Zero, ref iBytes, false); //Getting size of return data

buffer=Marshal.AllocCoTaskMem(iBytes); //allocating the datasize

allocated=true;

GetTcpTable(buffer, ref iBytes, false); //Run it again to fill the memory with the data

int structCount=Marshal.ReadInt32(buffer); // Get the number of structures

IntPtr buffSubPointer = buffer; //Making a pointer that will point into the buffer
buffSubPointer = (IntPtr)((int)buffer + 4); //Move to the first
data (ignoring dwNumEntries from the original MIB_TCPTABLE struct)

MIB_TCPROW[] tcpRows = new MIB_TCPROW[structCount]; //Declaring the array

//Get the struct size

MIB_TCPROW tmp = new MIB_TCPROW();

int sizeOfTCPROW = Marshal.SizeOf(tmp);

//Fill the array 1 by 1

for(int i=0; i
tcpRows[i] = (MIB_TCPROW)Marshal.PtrToStructure(buffSubPointer, typeof(MIB_TCPROW)); //copy struct data

buffSubPointer = (IntPtr)((int)buffSubPointer + sizeOfTCPROW ); //move to next structdata

}

return tcpRows;

}catch(Exception ex){

throw new Exception("getTcpTable failed! ["+ex.GetType().ToString()+","+ex.Message+"]");

}finally{

if(allocated) Marshal.FreeCoTaskMem(buffer); //Free the allocated memory

}

}

private static IntPtr GetPtrToNewObject(object obj){

IntPtr ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(obj));

Marshal.StructureToPtr(obj,ptr,false);

return ptr;

}

//Convert an IP string to the INT value

private static int IPStringToInt(string IP){

if(IP.IndexOf(".")<0) throw new Exception("Invalid IP address");

string[] addr = IP.Split('.');

if(addr.Length!=4) throw new Exception("Invalid IP address");

byte[] bytes = new byte[]{byte.Parse(addr[0]),byte.Parse(addr[1]),byte.Parse(addr[2]),byte.Parse(addr[3])};

return BitConverter.ToInt32(bytes,0);

}

//Convert an IP integer to IP string

private static string IPIntToString(int IP){

byte[] addr = System.BitConverter.GetBytes(IP);

return addr[0] +"."+addr[1] +"."+addr[2] +"."+addr[3];

}

}


در مورد سئوال اخر فکر کنم شما باید پروتکل های دانلود رو ببندی.دقیقا نمیدونم

SAMARE
سه شنبه 23 شهریور 1389, 13:39 عصر
سلام دوستان عزیز
منم میخوام یه دفترچه تلفن تحت شبکه درست کنم با زبان C#
ولی راستش من اصلا با مفهوم برنامه نویسی تحت شبکه آشنایی ندارم و نمیدونم برای نوشتن این برنامه اصلا باید از کجا شروع کنم !!!

ممنون میشم منم راهنمایی کنید ......