Вход

Сбор и хранение MAC адресов коммутаторов Cisco Catalyst с возможностью обращения к базе данных в которой они хранятся.

Рекомендуемая категория для самостоятельной подготовки:
Дипломная работа*
Код 120505
Дата создания 2010
Страниц 59
Источников 20
Мы сможем обработать ваш заказ (!) 19 апреля в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
6 740руб.
КУПИТЬ

Содержание

Введение
Глава1 Анализ существующих подходов к решению данной проблемы
Коммутаторы
1.1.Подход первый – CommView
1.2.Подход второй – 10-Страйк: Мониторинг Сети
1.3.Подход третий – NETMON от RINET Software Team
1.4.Подход четвертый – Arpwatch под *nix.
1.5.Подход, реализуемый в дипломе
Глава2 Разработка архитектуры программы
2.1 Выбор средств программирования
2.2. Описание алгоритма работы
Оконный интерфейс программы
Глава 3 Особенности программной реализации используемых алгоритмов программы и пример реализации
Глава 4 Анализ результатов
Заключение
Список использованной литературы
Электроные ресурсы

Фрагмент работы для ознакомления

Tables[tableName].NewRow();
DataRow newrow = MetroDS.Tables[tableName2].NewRow();
newrow["deviceId"] = id;
newrow["IP_ADDRESS"] = IPAddress;
newrow["COMMUNITY"] = Community;
newrow["INTERVAL"] = interval;

MetroDS.Tables[tableName2].Rows.Add(newrow);
this.dAdapt.Update(MetroDS, tableName2);
MetroDS.Tables[tableName2].AcceptChanges();
Console.WriteLine("device updated successfully");
}
catch (SqlException ex)
{
Console.WriteLine(string.Format("An exception of type {0} has been generated. The error message generated in {1}",
ex.GetType(),
ex.Message));
MessageBox.Show("Cannot save data into the Database ", "Save data error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
cn.Close();
Console.ReadLine();
}
}
/**
* Gets the device Id
*/
public int getDeviceId()
{
cn.ConnectionString = this.connectString();
int id = 0;
try
{
cn.Open();
dAdapt = new SqlDataAdapter("Select max (deviceId) as maxid from device", conString);
// Create a new DataTable
DataTable dtResult = new DataTable();
// Fill the DataTable with the result of the SQL statement
dAdapt.Fill(dtResult);

// Loop through all entries
foreach (DataRow drRow in dtResult.Rows)
{
if (!(drRow["maxid"].ToString()).Equals(""))
id = Convert.ToInt32(drRow["maxid"].ToString());
}
id = id + 1;
return id;
Console.WriteLine("device Id returned successfully");
}
catch (SqlException ex)
{
Console.WriteLine(string.Format("An exception of type {0} has been generated. The error message generated in {1}",
ex.GetType(),
ex.Message));
MessageBox.Show("Cannot get data from the Database ", "Save data error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
cn.Close();
Console.ReadLine();

}
return id;
}
/**
* Deletes the device from database.
*/
public void DeleteDevice( int Id)
{
cn.ConnectionString = this.connectString();
string del = @"delete from device where deviceId = " + Id;
try
{
cn.Open();

MetroDS = new DataSet("Metro");
dAdapt = new SqlDataAdapter("Select * from device", conString);
dAdapt.Fill(MetroDS, tableName2);
builderTCurrent = new SqlCommandBuilder(dAdapt);
DataTable dt = MetroDS.Tables[tableName2];

string strSQL = "delete from device where deviceId = " + Id;
SqlCommand objCommand2 = new SqlCommand(strSQL, cn);
SqlDataAdapter adapter2 = new SqlDataAdapter(objCommand2);
adapter2.Fill(MetroDS, tableName2);
adapter2.Update(MetroDS, tableName2);
MetroDS.Tables[tableName2].AcceptChanges();

Console.WriteLine("device updated successfully");
}
catch (SqlException ex)
{
Console.WriteLine(string.Format("An exception of type {0} has been generated. The error message generated in {1}",
ex.GetType(),
ex.Message));
MessageBox.Show("Cannot delete data from the Database ", "delete data error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
cn.Close();
Console.ReadLine();
}
}
public string DBHost
{
get
{
return host;
}
set
{
host = value.ToString();
}
}
public string DBName
{
get
{
return dbname;
}
set
{
dbname = value.ToString();
}
}
public string DBUser
{
get
{
return dbUser;
}
set
{
dbUser = value.ToString();
}
}
public string DBPass
{
get
{
return dbPass;
}
set
{
dbPass = value.ToString();
}
}
}
}
file smnThreadRequest.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using SnmpSharpNet;
using System.Threading;
using System.Windows.Forms;
namespace Myproject
{
class SnmpThreadRequest
{

Object locker = new Object();
private DateTime timeRequest;
private string macAddress;
private int interval = 0;
private string port = "";
public ListView lvwReceivedMessages;
private dbConnect dbConnection = new dbConnect();
public List<string> table;
private string ipAddress = "", communityString, oid;
private SnmpWalk walk;
public bool rep = false;
public delegate void AddListItem(String[] str);
public AddListItem respDelegate;

public void AddListItemResponse(String[] str)
{
ListViewItem item2 = new ListViewItem(str);
lvwReceivedMessages.Items.Add(item2);
}
// Constructor
public SnmpThreadRequest(String hostIp, String communityString, int intervalTime,
string dbConStr,ListView lv )
{
this.ipAddress = hostIp;
this.communityString = communityString;
this.interval = intervalTime;
lvwReceivedMessages = new ListView();

dbConnection.setConString( dbConStr );
lvwReceivedMessages = lv;
}
//Entry point of thread.
public void startRequest()
{
respDelegate = new AddListItem(AddListItemResponse);
do
{
Console.WriteLine("sending Snmp request on the host " + this.ipAddress + " with community string " + this.communityString);

try
{
this.rep = false;


{
lvwReceivedMessages.Invoke(respDelegate, new object[] { new string[] { DateTime.Now.ToString(), "Send request", this.ipAddress, " 1" } });
this.rep = this.sendRequest();
Thread.Sleep(TimeSpan.FromSeconds(5));
}
// Updates log information depending of the state of device.
if (this.rep == true)
lvwReceivedMessages.Invoke(respDelegate, new object[] { new string[] { DateTime.Now.ToString(), "Got response successfully", this.ipAddress, " 1" } });
else
{
lvwReceivedMessages.Invoke(respDelegate, new object[] { new string[] { DateTime.Now.ToString(), "No Response ", this.ipAddress, " 1" } });
lvwReceivedMessages.Invoke(respDelegate, new object[] { new string[] { DateTime.Now.ToString(), "Device is not in ready state", this.ipAddress, " 1" } });
}
// Delay interval time before to send the request again
Thread.Sleep(TimeSpan.FromMinutes(this.interval));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

} while (true);
}
public ListView getListV() {
return this.lvwReceivedMessages;
}
public bool sendRequest()
{
this.rep = true;
//Заполняем таблицу VLANs
oid = "1.3.6.1.4.1.9.9.46.1.3.1.1.2";
List<string> vlans = new List<string>();
walk = new SnmpWalk();
try
{
vlans = walk.GetOidList(communityString, ipAddress, oid);

}
catch (SnmpException ex)
{
Console.WriteLine(string.Format("An exception of type {0} has been generated. The error message generated in {1}",
ex.GetType(),
ex.Message));
this.rep = false;
return this.rep;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
this.rep = false;
return this.rep;
}
/*finally
{
return this.rep;
}*/
List<int> intVlan = new List<int>();
// Cохранить все порты, которые принадлежат VLAN 1
foreach (string s in vlans)
{
string nvlan = s.Substring(oid.Length + 3);
nvlan = nvlan.Substring(0, nvlan.IndexOf('*') - 1);
int i = Convert.ToInt32(nvlan);
if (i != 1002 && i != 1003 && i != 1004 && i != 1005)
{
intVlan.Add(i);
}
}
foreach (int i in intVlan)
{
string cmnt =
string.Format("{0}@{1}", communityString, i);
//Заподняем d1
oid = "1.3.6.1.2.1.17.4.3.1.1";
Dictionary<string, string> d11 = new Dictionary<string, string>();
d11 = GetD1(cmnt, ipAddress, oid);
//Заполняем d2
oid = "1.3.6.1.2.1.17.4.3.1.2";
Dictionary<string, string> d22 = new Dictionary<string, string>();
d22 = GetD2(cmnt, ipAddress, oid);
//Заполняем d4
oid = "1.3.6.1.2.1.17.1.4.1.2";
Dictionary<string, string> d44 = new Dictionary<string, string>();
d44 = GetD4(cmnt, ipAddress, oid);
//Заполняем d6
oid = "1.3.6.1.2.1.31.1.1.1.1";
Dictionary<string, string> d66 = new Dictionary<string, string>();
d66 = GetD6(cmnt, ipAddress, oid);
//Заполняем d3
Dictionary<string, string> d33 = new Dictionary<string, string>();
d33 = GetD3(d11, d22);
//Заполняем d5
Dictionary<string, string> d55 = new Dictionary<string, string>();
d55 = GetD5(d33, d44);
//Заполняем d7
Dictionary<string, string> d77 = new Dictionary<string, string>();
d77 = GetD7(d55, d66);
// Соединить MAC-адреса к порту, на котором был прочитан адрес
foreach (KeyValuePair<string, string> pair in d77)
{
dbConnection.updateTable(this.ipAddress, pair.Key, pair.Value, DateTime.Now.ToString());
}
}
return this.rep;
}
public Dictionary<string, string> GetD1(string community, string ip, string oid)
{
Dictionary<string, string> retDict = new Dictionary<string, string>();
List<string> mac = new List<string>();
try
{
// Сохранить список всех MAC адресов, которые были извлечены на все порты, которые принадлежат VLAN 1
mac = walk.GetOidList(community, ip, oid);
}
catch (SnmpException e)
{
MessageBox.Show("Can not get MAC Address for Ip address :" + this.ipAddress, " error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return retDict;
}
Dictionary<string, string> d1 = new Dictionary<string, string>();
foreach (string s in mac)
{
string key = s.Substring(23);
key = key.Substring(0, key.IndexOf('*') - 1);
string val = s.Substring(s.IndexOf('*') + 2);
try
{
// Определяем МАС адрес:
d1.Add(key, val);
}
catch (ArgumentException e)
{
MessageBox.Show("Error cocured during the request ", " error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return retDict;
}
}
return d1;
}
public Dictionary<string, string> GetD2(string community, string ip, string oid)
{
Dictionary<string, string> retDict = new Dictionary<string, string>();
List<string> ports = new List<string>();
try
{
// Cохранить порты для VLAN 1
ports = walk.GetOidList(community, ip, oid);
}
catch (SnmpException e)
{
MessageBox.Show("Can not get port for Ip address :" + this.ipAddress, " error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return retDict;
}
Dictionary<string, string> d2 = new Dictionary<string, string>();
foreach (string s in ports)

// определяем порт который относится к MAC адресу string key = s.Substring(23);
key = key.Substring(0, key.IndexOf('*') - 1);
string val = s.Substring(s.IndexOf('*') + 2);
d2.Add(key, val);
}
return d2;
}
public Dictionary<string, string> GetD3(Dictionary<string, string> dx, Dictionary<string, string> dy)
{
Dictionary<string, string> dz = new Dictionary<string, string>();
foreach (KeyValuePair<string, string> pair in dx)
{
string key = pair.Key;
if (dy.ContainsKey(key))
dz.Add(dx[key], dy[key]);
}
return dz;
}
public Dictionary<string, string> GetD5(Dictionary<string, string> dx, Dictionary<string, string> dy)
{
Dictionary<string, string> dz = new Dictionary<string, string>();
foreach (KeyValuePair<string, string> pair in dx)
{
string val = pair.Value;
if (dy.ContainsKey(val))
{
dz.Add(pair.Key, dy[val]);
}
}
return dz;
}
public Dictionary<string, string> GetD4(string community, string ip, string oid)
{
Dictionary<string, string> retDict = new Dictionary<string, string>();
List<string> ifindex = new List<string>();
try
{
// Используем walk для того, чтобы соотнести ifIndex значение с правильным названием порта.
ifindex = walk.GetOidList(community, ip, oid);
}
catch (SnmpException e)
{
return retDict;
}
Dictionary<string, string> d4 = new Dictionary<string, string>();
foreach (string s in ifindex)
{

string key = s.Substring(oid.Length + 1);
key = key.Substring(0, key.IndexOf('*') - 1);
string val = s.Substring(s.IndexOf('*') + 2);
d4.Add(key, val);
}
return d4;
}
public Dictionary<string, string> GetD6(string community, string ip, string oid)
{
Dictionary<string, string> retDict = new Dictionary<string, string>();
List<string> ifname = new List<string>();
try
{.
//Используем команду walk с ifName для того, чтобы соотнести ifIndex значение с правильным названием порта.
//
ifname = walk.GetOidList(community, ip, oid);
}
catch (SnmpException e)
{
return retDict;
}
Dictionary<string, string> d6 = new Dictionary<string, string>();
//С известного порта определяем номер ifIndex
foreach (string s in ifname)
{
string key = s.Substring(oid.Length + 1);
key = key.Substring(0, key.IndexOf('*') - 1);
string val = s.Substring(s.IndexOf('*') + 2);
d6.Add(key, val);
}
return d6;
}
private Dictionary<string, string> GetD7(Dictionary<string, string> dx, Dictionary<string, string> dy)
{
// С известного ifIndex мы определяем соответствующий порт Fast Ethernet:
Dictionary<string, string> dz = new Dictionary<string, string>();
foreach (KeyValuePair<string, string> pair in dx)
{
string val = pair.Value;
if (dy.ContainsKey(val))
{
dz.Add(pair.Key, dy[val]);
}
}
return dz;
}
file snmpwalk.cs
using System;
using System.Collections;
using System.Net;
using System.Collections.Generic;
using SnmpSharpNet;
namespace Myproject
{
class SnmpWalk
{
public SnmpWalk()
{
}
public List<string> GetOidList(string strCommunity, string strIP, string strOid)
{
List<string> res = new List<string>();
OctetString community = new OctetString(strCommunity);
AgentParameters param = new AgentParameters(community);
param.Version = SnmpVersion.Ver1;
IpAddress agent = new IpAddress(strIP);
UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1);
Oid rootOid = new Oid(strOid);
// This Oid represents last Oid returned by
// the SNMP agent
Oid lastOid = (Oid)rootOid.Clone();
// Pdu class used for all requests
Pdu pdu = new Pdu(PduType.GetNext);
// Loop through results
while (lastOid != null)
{
// When Pdu class is first constructed, RequestId is set to 0
// and during encoding id will be set to the random value
// for subsequent requests, id will be set to a value that
// needs to be incremented to have unique request ids for each
// packet
if (pdu.RequestId != 0)
{
pdu.RequestId += 1;
}
// Clear Oids from the Pdu class.
pdu.VbList.Clear();
// Initialize request PDU with the last retrieved Oid
pdu.VbList.Add(lastOid);
// Make SNMP request
SnmpV1Packet result = (SnmpV1Packet)target.Request(pdu, param);
// You should catch exceptions in the Request if using in real application.
// If result is null then agent didn't reply or we couldn't parse the reply.
if (result != null)
{
// ErrorStatus other then 0 is an error returned by
// the Agent - see SnmpConstants for error definitions
if (result.Pdu.ErrorStatus != 0)
{
// agent reported an error with the request
Console.WriteLine("Error in SNMP reply. Error {0} index {1}",
result.Pdu.ErrorStatus,
result.Pdu.ErrorIndex);
lastOid = null;
break;
}
else
{
// Walk through returned variable bindings
foreach (Vb v in result.Pdu.VbList)
{
// Check that retrieved Oid is "child" of the root OID
if (rootOid.IsRootOf(v.Oid))
{
//Console.WriteLine("{0} ({1}): {2}",
// v.Oid.ToString(),
// SnmpConstants.GetTypeName(v.Value.Type),
// v.Value.ToString());
res.Add(v.Oid.ToString() + " * " + v.Value.ToString());
lastOid = v.Oid;
}
else
{
// we have reached the end of the requested
// MIB tree. Set lastOid to null and exit loop
lastOid = null;
}
}
}
}
else
{
Console.WriteLine("No response received from SNMP agent.");
}
}
target.Close();
return res;
}
}
}
Глава 4 Анализ результатов
После запуска программы пользователь видит главное окно программы.
Рисунок 4 - главное окно программы
Manager status -показывает статус менеджера
Manager closed — нет отправлений запросов к коммутатору.
Для запуски отправления запросов нужно нажать на кнопку «Start Manager»
Agents -В состав управляемой системы входит компонент, называемый агентом, который отправляет отчёты управляющей системе. По существу SNMP агенты передают управленческую информацию на управляющие системы как переменные (такие как «свободная память», «имя системы», «количество работающих процессов»
В списке агентов есть 10.200.228.58 и 10.200229.225.
Add Agent to List — Добавить агент в списки
Рисунок 5 — Окно добавления устройства
Device list — список устройства (Управление коммутаторов), т.е добавление удаление коммутаторов, т.е.IP адрес с интервалом времени;
Рисунок 6- Добавление устройства
Рисунок 7-Устройство добавлено.
Рисунок 9. Удаление устройства
Как показано на рисунке 9, для удаления устройства сначала выбирается устройство, а потом нажимается кнопку «Delete device».
Рисунок 10. запуск менеджера (отправление запросов)
Для запуска нажать на кнопку «Start Manager», после чего начинается отправление запросов на устройства c IP адрес 10.200.228.128
Broadcast Message показывает интерфейс для логов и отображает списки коммутаторов, которые опрашиваются, т.е Broadcast Message выводит информацию, как происходит отправление запросов и ответы на них, а также коммутаторы, которые опрошены удачно, IP адрес и время, тип запроса (отравление,ответ) и SNMP версии.
Рисунок 11.. Информация о полученных MAC адресах и портах после отправления запроса по IP адресу 10.200.228.128

Рис. 12. Конфигурация базы данных
Имя хоста (сервера), на котором размещена база данных Microsoft SQL Server
имя базы данных
Показывает имя базы данных, к которой устанавливается подключение.Чтобы использовать новую базу данных.
Имя пользователя
Предоставляет текстовое поле для ввода идентификатора пользователя.При открытии диалоговое окно входа, где предлагается ввести данный идентификатор пользователя для доступа к базе данных.Для успешного подключения администратор базы данных должен предварительно предоставить разрешение на доступ к базе данных.
Password
Предоставляет текстовое поле для ввода пароля.При открытии диалоговое окно входа, где предлагается ввести данный пароль для доступа к базе данных.Для успешного подключения администратор базы данных должен предварительно предоставить разрешение на доступ к базе данных.
Настройки подключения к базе данных .
«Get Table» - кнопка, после нажатия на которую данные полученные от коммутатора, записываются в Б.Д
Струтура БД для сохранения информации в БД
Таблица Device

deviceId int ,- Идентификатор устройсва
IP_ADDRESS char(17) — IP адрес устройсва
Community char(17), – Community строка
Interval int — Интервал времени по корому будет происходить отправление запросов

Таблица Information
DEVICEID int - Идентификатро устройства
IP_ADDRESS char(17) -IP адрес устройсва
MAC_ADDRESS char(17), - MAC адресс найден после отправления запроса которму соотвествует данному порту
PORT char(17) , -Порт найден после отправления запроса
TIME_REQUEST DATETIME — время по корому было сделан
запрос
Создание БД.
CREATE TABLE INFORMATIONS ( //Таблица для сохранения полученных информация
id int
IDENTITY(1,1)
PRIMARY KEY CLUSTERED,
device_id int NOT NULL REFERENCES DEVICE(id),
ip_address varchar(20) NOT NULL,
port varchar(50) ,
mac_address varchar(50) ,
time_request DATETIME NOT NULL
)
CREATE TABLE DEVICE // Таблица устройств
(
id smallint
IDENTITY(1,1)
PRIMARY KEY CLUSTERED,
ip_address_device varchar(20) NOT NULL,
interval_time_request int NOT NULL
)
Структура всех классов приведена на рис. 13.
Рис. 13. Структура классов БД
Заключение
В локальных сетях часто возникает проблема распределения адресов. Многие люди пытаются получить неправильные или просто понравившиеся адреса.  Если эти адреса в данное время не заняты (компьютеры-владельцы выключены), то им это удается, и настоящий владелец не может получить свой адрес. Таким образом, могут пострадать многие сетевые сервисы, так как адресация происходит именно по IP. Большинство брандмауэров также работает на уровне IP адресов, то есть произойдет подмена компьютеров, и защитные правила не будут работать для конкретной машины.
Основным резальтатом работы является создание программного обеспечения, которое осуществляет поиск хоста по MAC адресу. Созданную программу можно использовать для работы в локальной сети предприятия.
Список использованной литературы
Троелсен Э. C# и платформа .NET. Библиотека программиста. – Спб.: Питер, 2002.
Оньон Ф. Основы ASP.NET с примерами на C#. – М.: Вильямс, 2003.
Волоха А.В. Microsoft SQL Server 2005. Новые возможности. – Спб.: Питер, 2006.
Митчелл С., Уолтер С., Севен Д. ASP.NET: советы, рекомендации, примеры. – М.: Вильямс, 2002.
Уилтон П. JavaScript. Основы. – Спб.: Символ-Плюс, 2002.
Сеппа Д. Microsoft ADO.NET. – М.: Русская редакция, 2003.
Ши Д., Хольцшлаг М. Философия CSS-дизайна. – М.: НТ Пресс, 2005.
Матросов А., Сергеев А., Чаунин М. HTML 4.0 в подлиннике. – Спб.: BHV-Петербург, 2005.
Электроные ресурсы
Lubarsky A. Сложные графики и диаграммы в ASP.NET. Часть третья - HttpHandler/System.Drawing. http://aspnetmania.com/Articles/Article/42.html
Прохоров M. Сложные графики и диаграммы в ASP.NET. Часть четвёртая – ChartSpace. http://aspnetmania.com/Articles/Article/55.html
Веденин В. Работа с Crystal Report.NET. http://www.gotdotnet.ru/LearnDotNet/ NETFramework/85842.aspx
Добсон Р. Азы Reporting Services. Windows IT Pro #08/2005 (http://www.osp.ru/win 2000/2005/08/380209/)
Temnov O. Обработка ошибок в ASP.NET приложении. http://dotsite.ru/Publications/ Publication 152.aspx
Uvarov D. ASP.NET WebHandlers, или что такое .ashx файлы. http://dotsite.ru/ Publications/Publication150.aspx
Jenihov E. Частичная проверка правильности ввода данных. http://dotsite.ru/ Publications/Publication153.aspx
Митчелл С. Понимание состояния отображения ASP.NET. http://www.Ruemind ru/Text.aspx?ArticleId=385
Franke D. An Introduction to Microsoft SQL Server 2000 Reporting Services. http://aspnet 4guysfromrolla.com/articles/031605-1.aspx
Siddiqui M. A. HTTP Handlers and HTTP Modules in ASP.NET. http://www.5seconds com/issue/020417.htm
Mitchell S. Dynamic Controls in ASP.NET. http://aspnet.4guysfromrolla.om/articles 081402-1.aspx
Mitchell S. Dynamic Web Controls, Postbacks, and View State. http://aspnet.4guysfromrolla. om/articles/092904-1.aspx

2
Начало
I = 0
I <= N NNN55gggggggnnndgnn NNNNNN\NNNhNN NN
I = I +1
host = TableIP[i]
com = communityname
OID = .1.3.6.1.4.1.9.9.46.1.3.1.1.2
snmpwalk -c com host OID
Вывод MAC Address
Вывод Port
T = 0
T <= 300
T = T+1
Insert into macTable( id,MAcAdress,port, time_send)

Список литературы [ всего 20]

1.Троелсен Э. C# и платформа .NET. Библиотека программиста. – Спб.: Питер, 2002.
2.Оньон Ф. Основы ASP.NET с примерами на C#. – М.: Вильямс, 2003.
3.Волоха А.В. Microsoft SQL Server 2005. Новые возможности. – Спб.: Питер, 2006.
4.Митчелл С., Уолтер С., Севен Д. ASP.NET: советы, рекомендации, примеры. – М.: Вильямс, 2002.
5.Уилтон П. JavaScript. Основы. – Спб.: Символ-Плюс, 2002.
6.Сеппа Д. Microsoft ADO.NET. – М.: Русская редакция, 2003.
7.Ши Д., Хольцшлаг М. Философия CSS-дизайна. – М.: НТ Пресс, 2005.
8.Матросов А., Сергеев А., Чаунин М. HTML 4.0 в подлиннике. – Спб.: BHV-Петербург, 2005.
Электроные ресурсы
9.Lubarsky A. Сложные графики и диаграммы в ASP.NET. Часть третья - HttpHandler/System.Drawing. http://aspnetmania.com/Articles/Article/42.html
10.Прохоров M. Сложные графики и диаграммы в ASP.NET. Часть четвёртая – ChartSpace. http://aspnetmania.com/Articles/Article/55.html
11.Веденин В. Работа с Crystal Report.NET. http://www.gotdotnet.ru/LearnDotNet/ NETFramework/85842.aspx
12.Добсон Р. Азы Reporting Services. Windows IT Pro #08/2005 (http://www.osp.ru/win 2000/2005/08/380209/)
13.Temnov O. Обработка ошибок в ASP.NET приложении. http://dotsite.ru/Publications/ Publication 152.aspx
14.Uvarov D. ASP.NET WebHandlers, или что такое .ashx файлы. http://dotsite.ru/ Publications/Publication150.aspx
15.Jenihov E. Частичная проверка правильности ввода данных. http://dotsite.ru/ Publications/Publication153.aspx
16.Митчелл С. Понимание состояния отображения ASP.NET. http://www.Ruemind ru/Text.aspx?ArticleId=385
17.Franke D. An Introduction to Microsoft SQL Server 2000 Reporting Services. http://aspnet 4guysfromrolla.com/articles/031605-1.aspx
18.Siddiqui M. A. HTTP Handlers and HTTP Modules in ASP.NET. http://www.5seconds com/issue/020417.htm
19.Mitchell S. Dynamic Controls in ASP.NET. http://aspnet.4guysfromrolla.om/articles 081402-1.aspx
20.Mitchell S. Dynamic Web Controls, Postbacks, and View State. http://aspnet.4guysfromrolla. om/articles/092904-1.aspx
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00345
© Рефератбанк, 2002 - 2024