Onko VB6:lla mahdollista saada ilman ylimääräisiä kirjastoja tietoon tietyn prosessin (esim. java.exe) käyttämä etä-ip ja käytössä oleva Socket ID johon/josta tämä prosessi lähettää ja vastaanottaa dataa?
Ja lähettää sinne winsockilla paketteja?
Jos tiedätte ohjelman Wpe Pro.. Eli Winsock Packet Editor joka on myös packet sniffer ja jolla voi myös lähettää paketteja. Haluaisin tehdä ohjelman jolla voi tehdä scriptin lähetettävistä paketeista, koska Wpe Pro:ssa voi tehdä vain lähetyslistan, jotka kaikki lähtee saman intervallin välein.
Eli en siis tarvitse muita ominaisuuksia kuin sen, että pystyn lähettämään
serveriin, jonka kanssa prosessi on yhteydessä, paketteja (samalla tavalla kuin prosessoir (client) sen lähettäisi, eli niin ettei serveri blockaa sitä (sama Socket ID).)
Toivottavasti joku ymmärtää mitä tarkoitan, vaikea selittää kun en osaa käyttää winsockia niin hyvin :D
PS: En tiedä mitä socket ID tarkoittaa..
Et pysty Visual Basicilla.
Oon kyllä joskus miettiny voiko noita socketteja kopioida prosessien välillä. "Tietoturvan" kannalta se olis vähän huono, ja siitä vois seurata ongelmia jos sitä käyttäis kaks prosessia samaan aikaan. En jaksanu asiaa kuitenkaan ruveta tutkimaan, että kertokoon joku joka oikeesti tietää jotain. Joka tapauksessa et sais VB:llä sitä socketin id:tä selville (ainakaan fiksusti).
Kuinkahan vaikea se olis toteuttaa WinPCapin kanssa?
WinPCap ei pysty kaappaamaan tietyn prosessin verkkoliikennettä, vaan samalla tulee kaikki mitä käyttöjärjestelmä lähettää tai vastaanottaa. Kannattaisi tehdä samalla tavalla kuin WPE Pro tekee, eli siis hookata sen yksittäisen prosessin ws2_32.dll:stä send()- ja recv()-funktiot. Viestien lähettämiseksi tarvitsee luoda oma thread java.exeen, joka sitten käyttää sitä socketia. Visual Basicilla hookkien kirjoittaminen ei niin vain taida onnistua, kun se on sen verran riippuvainen msvbvm60.dll:istä sun muista.
Moikka taas JussiR!
VB6:lla on mahdollista saada tietoon tietyn prosessin Remote IP/Network Socket ID...mutta jutska vaatii aivan ylettömän extreme'ä WMI/API-vääntöä...sensijaan VB.NET tai paremminkin .NET Framework tarjoaa (System.Net, System.Net.Sockets, System.Net.NetworkInformation...jne.) lähes kaikken unelmoitavissa olevan...
Tämän lisäksi löytyy vielä .NET Framework-extramukavuus elikä ComVisible-ominaisuus, joka mahdollistaa .NET kirjastojen käytön myös esim. VB6-ohjelmissa tai vaikkapa VBA-makroissa...
tässä pieni esimerkki dll-funkkarista:
' Luo Class Library projekti: GetEverythingYouNeed ' Luo projektiin luokka: FromTheNetwork ' HUOM! Vaihda Class1.vb tai NewClass.vb nimeksi: FromTheNetwork.vb ' ja lisää projektiin GAC:sta erikseen referenssi: System.Net Imports System Imports System.Net Imports System.Net.NetworkInformation Imports System.Runtime.InteropServices <ClassInterface(ClassInterfaceType.AutoDual)> _ <ComVisible(True)> _ <ProgId("GetEverythingYouNeed.FromTheNetwork")> _ Public Class FromTheNetwork Friend InfoStr As String = String.Empty <ComVisible(True)> _ Public Function GetAddress() As String Dim properties As IPGlobalProperties = _ IPGlobalProperties.GetIPGlobalProperties() InfoStr += "Computer name: " + properties.HostName.ToString InfoStr += Environment.NewLine InfoStr += "Domain name: " + properties.DomainName.ToString InfoStr += Environment.NewLine InfoStr += "Node type: " + properties.NodeType.ToString InfoStr += Environment.NewLine InfoStr += "DHCP scope: " + properties.DhcpScopeName.ToString InfoStr += Environment.NewLine InfoStr += "WINS proxy: " + properties.IsWinsProxy.ToString InfoStr += Environment.NewLine+ Environment.NewLine Dim Interfaces As NetworkInterface() = _ NetworkInterface.GetAllNetworkInterfaces Dim iface As Object For Each iface In Interfaces GetIPAddresses(iface.GetIPProperties) Next Return InfoStr: InfoStr = Nothing End Function Private Sub GetIPAddresses( _ ByVal adapterProperties As IPInterfaceProperties) Dim dnsServers As IPAddressCollection = _ adapterProperties.DnsAddresses If Not dnsServers Is Nothing Then For Each dns As System.Net.IPAddress in dnsServers InfoStr += "DNS Servers ......................... : " _ + dns.ToString + Environment.Newline Next End If Dim anyCast As IPAddressInformationCollection = _ adapterProperties.AnycastAddresses If Not anyCast Is Nothing Then For Each any as IPAddressInformation in anyCast InfoStr += "Anycast Address ....................... : " _ + any.Address.ToString + Environment.Newline _ + "Transient: " + any.IsTransient.ToString _ + Environment.Newline _ + "DNS Eligible: " + any.IsDnsEligible.ToString _ + Environment.Newline Next End If Dim multiCast As MulticastIPAddressInformationCollection = _ adapterProperties.MulticastAddresses If Not multiCast Is Nothing Then For Each multi As IPAddressInformation in multiCast InfoStr += "Multicast Address ................... : " _ + multi.Address.ToString _ + Environment.Newline _ + "Transient: " + multi.IsTransient.ToString _ + Environment.Newline _ + "DNS Eligible: " + multi.IsDnsEligible.ToString _ + Environment.Newline Next End If Dim uniCast As UnicastIPAddressInformationCollection = _ adapterProperties.UnicastAddresses If Not uniCast Is Nothing Then Dim lifeTimeFormat As String = _ "dddd, MMMM dd, yyyy hh:mm:ss tt" For Each uni As UnicastIPAddressInformation in uniCast Dim xwhen As DateTime InfoStr += "Unicast Address ..................... : " _ + uni.Address.ToString + Environment.Newline _ + "Prefix Origin ....................... : " _ + uni.PrefixOrigin.ToString + Environment.Newline _ + "Suffix Origin ....................... : " _ + uni.SuffixOrigin.ToString + Environment.Newline _ + "Duplicate Address Detection ......... : " _ + uni.DuplicateAddressDetectionState.ToString _ + Environment.Newline xwhen = DateTime.UtcNow + _ TimeSpan.FromSeconds(uni.AddressValidLifetime) xwhen = xwhen.ToLocalTime() InfoStr += "Valid Life Time ..................... : " _ + xwhen.ToString(lifeTimeFormat, _ System.Globalization.CultureInfo.CurrentCulture) _ + Environment.Newline xwhen = DateTime.UtcNow + _ TimeSpan.FromSeconds(uni.AddressPreferredLifetime) xwhen = xwhen.ToLocalTime() InfoStr += "Preferred life time ................. : " _ + xwhen.ToString(lifeTimeFormat, _ System.Globalization.CultureInfo.CurrentCulture) _ + Environment.Newline xwhen = DateTime.UtcNow + _ TimeSpan.FromSeconds(uni.DhcpLeaseLifetime) xwhen = xwhen.ToLocalTime() InfoStr += "DHCP Leased Life Time ............... : " _ + xwhen.ToString(lifeTimeFormat, _ System.Globalization.CultureInfo.CurrentCulture) _ + Environment.Newline Next End If End Sub '*** ennen projektin kääntämistä: ' Valitse: Project -> Project Options ' Valitse välilehti: Signign ' Ruksaa: Sign the assembly ' Valitse pudotusvalikosta: Create ' Klikkaa: OK ' Tallenna ja käännä projekti... End Class
AssemblyInfo.vb tiedoston pitäisi näyttää suurin piirtein seuraavanlaiselta
HUOM! luo uusi oma GUID GuidGen-apuohjelmalla, kopioi Windowsin leikepöydälle
(poista aaltosulkeet kun olet tuonut leikepöydältä AssemblyInfo-tiedostoon)
Imports System.Reflection Imports System.Runtime.CompilerServices Imports System.Runtime.InteropServices <assembly: AssemblyTitle("GetEverythingYouNeed")> <assembly: AssemblyDescription("")> <assembly: AssemblyConfiguration("")> <assembly: AssemblyCompany("")> <assembly: AssemblyProduct("GetEverythingYouNeed")> <assembly: AssemblyCopyright("Copyright 2008")> <assembly: AssemblyTrademark("")> <assembly: AssemblyCulture("")> <assembly: ComVisible(True)> <assembly: Guid("45802655-D603-495a-A35E-1F799AA9A641")> <assembly: AssemblyVersion("1.0.0.0")>
Avaa Projektikansio ja siirry edelleen bin-kansioon...tarkista että kansiossa on tiedostot: GetEverythingYouNeed.dll & GetEverythingYouNeed.TLB
jätä bin-kansio avoimeksi avaa windowsin komentokehote...kirjoita komentokehotteeseen: CD ja välilyönti klikkaa hiiren oikealla projektin bin-kansion jotain tiedostoa ja valitse ominaisuudet, maalaa kohdan sijainti perästä: hakemistopolku harmaaksi, klikkaa harmaan alueen päällä hiiren oikealla ja valitse kopioi...
siirry takaisin komentokehote-ikkunaan, klikkaa ikkunassa hiiren oikealla, valitse liitä ja paina Enter-näppäintä...
HUOM! alla mainitut ohjelmat ovat .NET Framework-työkaluja ja ne toimivat suoraan mistä tahansa hakemistosta vain siinä tapauksessa, että Windowsin Ympäristömuuttajan path-asetuksissa on viittaus ao. hakemistoon (esim. C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin mikäli Windows SDK for Windows Server 2008 and .NET Framework 3.5 on asennettu)
Jos tiedosto GetEverythingYouNeed.TLB löytyi voit jättää 1. kohdan väliin ja jatkaa kohdasta 2
1. Kirjoita komentokehotteeseen:
TlbExp GetEverythingYouNeed.dll /out: GetEverythingYouNeed.Tlb ja paina Enter-näppäintä...
2. Kirjoita komentokehotteeseen: gacutil /i GetEverythingYouNeed.dll ja paina Enter-näppäinta...
3. Kirjoita komentokehotteeseen:
ngen install GetEverythingYouNeed.dll ja paina taas Enter-näppäintä...nyt assembly on rekisteröity ja siitä on luotu samalla Native Image GAC:een (Global Assembly Cache)...
Testaus: Avaa esim. Excel/VB-Editori valitse Tools -> References -> Browse...siirry AddReference-Dialogin avulla .NET projektin bin-kansioon, tuplaklikkaa tiedoston GetEverythingYouNeed.TLB kuvaketta, klikkaa OK-painiketta, lisää VBA-projektiin UserForm, lisää formille nappi ja tekstiboxi, aseta tekstiboxin multline-arvoksi: True, ScrollBars-arvoksi: Vertical ja kirjoita nappulan Click_tapahtuman koodiksi:
Private Sub CommandButton1_Click() Private Sub CommandButton1_Click() Dim TheThing As New GetEverythingYouNeed.FromTheNetwork TextBox1.Text = TheThing.GetAddress() TextBox1.SetFocus TextBox1.SelStart = 0 End Sub
kun .dll jutskat on selvillä niin ala tutkimaan mitä kaikkea kivaa System.Net assembly kätkee taakseen...
Kiitoksia jälleen kerran!
Pitäis kai siirtyä tuohon .NETtiin ja kokeilla tuota.
Aihe on jo aika vanha, joten et voi enää vastata siihen.