[C++] nbtstat in console app

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Hi all,

ik probeer uit te vinden waarom ik met nbtstat wel output krijg in cmd, maar niet in de console app waar ik momenteel mee bezig ben.

Ik probeer de output direct op het scherm te krijgen, of naar een test bestand weg te schrijven, maar beide opties geven geen resultaat.

nbtstat kan wel worden gevonden, volgens mij voert hij ook wel wat uit aangezien het een aantal seconden erg stil blijft op het scherm, waarna nbtstat stopt zonder het weergeven van informatie.

Hier de functie die ik momenteel gebruik:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void nbtstat()
{
    string user_input, lookup_again;
    do {
    system("cls");
    cout << "\nEnter URL or IP: ";
    cin.ignore(256,'\n');
    getline(cin, user_input);
    user_input.erase(remove_if(user_input.begin(), user_input.end(), IsSpaceOrCR), user_input.end());
    system("cls");
    // Without the redirection to test.txt, the screen stays empty in the app.
    system(("C:\\Windows\\System32\\nbtstat.exe -A " + user_input + " > %TEMP%\\test.txt").c_str()); 
        system("pause"); // Only for debugging purpose.
        cout << "Done." << endl;
        cout << "\nTry again?" << endl;
        cout << "\n(Y)es or (N)o: ";
        cin >> lookup_again;
    } while(lookup_again=="Y" || lookup_again=="Yes" || lookup_again=="y" || lookup_again=="yes");
}


Iemand mischien een tip ?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Wat ik niet snap is dat je een comment hebt staan dat ZONDER redirection je scherm leeg blijft, maar als je de output van nbstat.exe redirect naar een file is het nogal logisch dat je dan niks op je scherm ziet lijkt me?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Creepy schreef op vrijdag 22 juni 2012 @ 14:50:
Wat ik niet snap is dat je een comment hebt staan dat ZONDER redirection je scherm leeg blijft, maar als je de output van nbstat.exe redirect naar een file is het nogal logisch dat je dan niks op je scherm ziet lijkt me?
als ik de output redirect naar een file, dan is de file ook leeg, dus het ligt niet aan de manier waarop ik de output in de console probeer te krijgen. nbtstat laat dus niks zien, zowel niet in de file als in de console.

ik heb het dus geprobeerd met en zonder redirect, beide niks.

[ Voor 5% gewijzigd door MarcHeijerman op 22-06-2012 15:04 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Probeer het eens met een andere tool dan nbstat, krijg je dan wél output?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
.oisyn schreef op vrijdag 22 juni 2012 @ 15:10:
Probeer het eens met een andere tool dan nbstat, krijg je dan wél output?
ik heb ongeveer 30 functies in die tool en alles werkt behalve nbtstat

oa:
ping
traceroute
netsh
dns resolver
etc..

[ Voor 9% gewijzigd door MarcHeijerman op 22-06-2012 15:22 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Tja, dan lijkt me dat het probleem bij nbtstat ligt of hoe jij 'm aanroept.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:35
Kan het zijn dat de output van nbstat naar een andere console dan zijn zijn stdout gaat misschien?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
farlane schreef op vrijdag 22 juni 2012 @ 19:47:
Kan het zijn dat de output van nbstat naar een andere console dan zijn zijn stdout gaat misschien?
Dat zou ik niet weten, er wordt in ieder geval geen extra console weergegeven wanneer je nbtstat vanuit cmd runt

Acties:
  • 0 Henk 'm!

  • Travelan
  • Registratie: Februari 2002
  • Laatst online: 20-09 23:25
[edit] Irrelevant, mijn fout!

[ Voor 200% gewijzigd door Travelan op 02-07-2012 11:26 ]


Acties:
  • 0 Henk 'm!

  • Travelan
  • Registratie: Februari 2002
  • Laatst online: 20-09 23:25
MarcHeijerman schreef op donderdag 28 juni 2012 @ 09:57:
[...]


Dat zou ik niet weten, er wordt in ieder geval geen extra console weergegeven wanneer je nbtstat vanuit cmd runt
Hij bedoelt misschien stderr. Maar ik denk het niet.

Heb je al geprobeert de string
C++:
1
"C:\\Windows\\System32\\nbtstat.exe -A " + user_input + " > %TEMP%\\test.txt"
te printen en dan te kijken of, als je het handmatig in een cmd.exe invult, het doet wat je wilt?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Travelan schreef op maandag 02 juli 2012 @ 11:21:
Het gaat sowieso grandioos fout bij de string vergelijking:

C:
1
lookup_again=="Y"


In C kun je niet zo strings vergelijken.
In C niet nee. In C++ kun je std::string instances wél zo vergelijken. En dat is precies wat ie doet.
Wat je moet doen is:
C:
1
strcmp(lookup_again, "Y") == 0
En dat kan dus niet, een std::string is niet impliciet converteerbaar naar een const char*.

[ Voor 19% gewijzigd door .oisyn op 02-07-2012 11:26 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Gratzip
  • Registratie: Oktober 2010
  • Laatst online: 26-09-2020
Probeer anders een printf("|%s|",user_input); voor system(); om te kijken of er niet nog een newline oid in zit.

-edit- oisyn heeft gelijk, tip hieronder is ws onzin -edit-

En kan dit niet voor problemen zorgen?:
C++:
1
 %TEMP% 

Zou je %%TEMP%% van kunnen maken voordat je compiler van %T of %\ wat geks maakt.

[ Voor 10% gewijzigd door Gratzip op 02-07-2012 16:07 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Anders dan de escape characters doet een compiler in z'n geheel niets met %-tekens*. Het hangt nogal van de functie af hoe de string geparsed wordt - in het geval van system() en puts() neemt ie 'm letterlijk, en in het geval van printf() gaat ie door de string heen om te kijken naar format specifiers. "%%TEMP%%" doet dus niet wat je wilt.

* Al kunnen sommige compilers wel warnings geven als je bijv. een printf() aanroept met verkeerde parameters, maar dat is alleen maar omdat ze specifieke support hebben ingebouwd voor die functies waardoor de compiler iets beter snapt wat je wil doen.

[ Voor 3% gewijzigd door .oisyn op 02-07-2012 15:37 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Gratzip heeft gelijk wat betreft de dubbele percent tekens, zie http://www.cplusplus.com/reference/clibrary/cstdio/printf/

Hier staan de opties netjes uitgewerkt met wat simpele voorbeelden.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Zoals ik al zei, dat geldt alleen voor de printf-familie van functies. Waarom? Omdat die functies zo zijn geïmplementeerd dat ze tijdens runtime de string doorlopen op zoek naar procenttekens. Doet system() dat ook? Neen.

[ Voor 12% gewijzigd door .oisyn op 02-07-2012 20:27 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Gratzip
  • Registratie: Oktober 2010
  • Laatst online: 26-09-2020
Oke, sorry voor de overlast. Klopt het dat je een 64 bit Windows systeem hebt? Want dan heb ik het denk ik gevonden. Uitgelegd hier:
http://www.conetrix.com/B...-on-64-Bit-Windows-7.aspx
http://scottiestech.info/...-a-script-in-x64-windows/
Hier:
C:
1
2
    system("C:\\Windows\\System32\\nbtstat.exe");          // werkt niet
    system("C:\\Windows\\sysnative\\nbtstat.exe");           // werkt wel

Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Gratzip schreef op maandag 02 juli 2012 @ 15:31:
Probeer anders een printf("|%s|",user_input); voor system(); om te kijken of er niet nog een newline oid in zit.

-edit- oisyn heeft gelijk, tip hieronder is ws onzin -edit-

En kan dit niet voor problemen zorgen?:
C++:
1
 %TEMP% 

Zou je %%TEMP%% van kunnen maken voordat je compiler van %T of %\ wat geks maakt.
system(("C:\\Windows\\System32\\nbtstat.exe -A " + user_input + " > %%TEMP%%\\test.txt").c_str());

net geprobeerd, krijg ik de volgende error:
The filename, directory name, or volume label syntax is incorrect.

Lijkt me een nbtstat error ovigerens.

Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Gratzip schreef op maandag 02 juli 2012 @ 21:10:
Oke, sorry voor de overlast. Klopt het dat je een 64 bit Windows systeem hebt? Want dan heb ik het denk ik gevonden. Uitgelegd hier:
http://www.conetrix.com/B...-on-64-Bit-Windows-7.aspx
http://scottiestech.info/...-a-script-in-x64-windows/
Hier:
C:
1
2
    system("C:\\Windows\\System32\\nbtstat.exe");          // werkt niet
    system("C:\\Windows\\sysnative\\nbtstat.exe");           // werkt wel
TOP!, dit werkt inderdaad. Nog niet aan sysnative gedacht, maar dit is inderdaad de oplossing.

Nu zou dit als ik het goed begrijp, ook op een 32bits moeten werken correct ?

[ Voor 5% gewijzigd door MarcHeijerman op 03-07-2012 10:32 ]


Acties:
  • 0 Henk 'm!

  • Gratzip
  • Registratie: Oktober 2010
  • Laatst online: 26-09-2020
Volgens mij wel, maar je kan het het best even testen denk ik. In dit artikel onderaan staat een soort flow van wat je moet doen:
http://scottiestech.info/...-a-script-in-x64-windows/
Als je een 64bit systeem hebt (als de SysWOW64 map bestaat), moet je in die native map kijken, anders kan je gewoon dat programma aanklappen. Dus in 32bit maakt het niet uit van waar je het opstart.

Acties:
  • 0 Henk 'm!

Verwijderd

Is het opgeven van het volledige pad wel überhaupt nodig vraag ik mij af?
Ik draai ook W7 x64 en als ik nbtstat ingeef in mijn console krijg ik gewoon het programma te zien met al zijn switches?

Zou nbtstat + parameters al niet gewoon voldoende zijn, of zie ik nu iets over het hoofd?

Acties:
  • 0 Henk 'm!

  • Solopher
  • Registratie: December 2002
  • Laatst online: 11-09 14:55
Ik weet niet of je PATH variablen dan wel bereikbaar zijn?
Pagina: 1