PDA

Просмотр полной версии : вопрос по коду (python)


gold-goblin
06.01.2009, 01:54
Я только начинаю его учить...
Тут набросал маленькую программку.

сервер

import socket
import os
print 'vvedite ima polzovatela dla podklychenia?'
name = raw_input("--> ")
print 'vvedite parol dla dostypa'
pass = raw_input("--> ")
sock = socket(AF_UNIX, SOCK_STREAM)
sock.bind(("",8888))
sock.listen(1)
while 1:
client,addr = s.accept()
sock.connect((client, addr))
print "podklychilsa ",addr
client.send('name?')
paket = s.recv(2048)
if paket == (' ', pass,' ', name):
client.send('est kontakt')
# Здесь получаем и выполняем команды в цикле
for targar in -1:
paket = s.recv(2048)
cmd = os.popen("C:\\windows\system32\cmd.exe", paket)
print 'popitka vipolnit komandy' paket
otvet_cmd = cmd.read()
print 'rezyltat vipolnenia' otvet_cmd
client.send(otvet_cmd)
# надо сделать выход из цикла =)
# здесь запись в лог фаил (это надо сделать как доп опцию

else:
client.send('net kontakta')




Клиент


import socket
print 'vibirite vashu OS'
print '1 - Windows'
print '2 - Linux'
sistem = raw_input("--> ")
if sistem == 1:
sock = socket(AF_INET, SOCK_STREAM)
elif sistem == 2:
sock = socket(AF_UNIX, SOCK_STREAM)
print 'adres servera'
server = raw_input("--> ")
print 'port servera'
port = raw_input("--> ")
sock.connect((server,port))
paket = s.recv(2048)
if paket == name?:
print 'vvedite ima'
name = raw_input("--> ")
print 'vvedite pass'
pass = raw_input("--> ")
client.send(' ', pass,' ', name)
paket = s.recv(2048)
if paket == est kontakt:
print 'gotov k peredache komandi'
# Тут швыряем команды в бесконечном цикле =)
for targar in -1:
komanda = raw_input("--> ")
client.send(komanda)
print 'rezyltat vipolnenia'
paket = s.recv(2048)
print paket
# надо сделать выход из цикла

elif paket == net kontakta:
print 'avtorizachija ne ydolas'
s.close()



У меня при запуске выдает кучу ошибок.... если кому не сложно подскажите почему там ошибка (что я сделал не правельно) с меня +

De-visible
06.01.2009, 02:16
Щас занят немного но при беглом взгляде могу сказать точно, что переменной pass не должно быть!, так как в питоне есть такая функция.
Так что переименуй.

De-visible
06.01.2009, 02:20
Так
print 'popitka vipolnit komandy' paket
и так

print 'rezyltat vipolnenia' otvet_cmd
Делать незя!11

Исправь на:
print 'popitka vipolnit komandy '+ paket

print 'rezyltat vipolnenia '+ otvet_cmd

И еще не забывай не у всех никсы))

De-visible
06.01.2009, 02:30
sock = socket(AF_INET, SOCK_STREAM)
меня учили делать так:
socket.socket(socket.AF_INET, socket.SOCK_STREAM)

De-visible
06.01.2009, 02:33
client,addr = s.accept()
что такое 's' ? Питон это откуда должен знать?=>
client,addr = sock.accept()

И вот на этом этапе сервер начинает работать!11
порадовались))
блин я на отходняках)) позитиффф бля.

De-visible
06.01.2009, 02:41
И на этом этапе сдох питон((
Оживился...

sock = socket(AF_UNIX, SOCK_STREAM)
sock = socket(AF_INET, SOCK_STREAM)


sock =socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock =socket.socket(socket.AF_UNIX,socket.SOCK_STREAM)

Далее че за хрень?:

if paket == name?:
Зачем там вопросительный знак? Удаляй его.

Далее:

Та же хрень с pass

переименовывай.

Далее:

if paket == est kontakt:

Жесть на этом этапе расхотелось смотреть дальше((

Где кавычки то?

Далее

elif paket == net kontakta:

Здесь тоже самое.

gold-goblin
06.01.2009, 03:03
De-visible
Большое СПАСИБО!!!
Кстати кавычки есть,,, странно почему то не копировались на форум.
Буду мучать дальше =)

De-visible
06.01.2009, 03:06
import socket
import os
print 'vvedite ima polzovatela dla podklychenia?'
name ="admin" #raw_input("--> ")
print 'vvedite parol dla dostypa'
password ="123" #raw_input("--> ")
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("127.0.0.1",8888))
sock.listen(1)
while 1:
client,addr = sock.accept()
sock.connect((client, addr))
print "podklychilsa ",addr
client.send('name?')
paket = s.recv(2048)
if paket == (' ', password,' ', name):
client.send('est kontakt')
# Здесь получаем и выполняем команды в цикле
for targar in -1:
paket = s.recv(2048)
cmd = os.popen("C:\\windows\system32\cmd.exe", paket)
print 'popitka vipolnit komandy '+ paket
otvet_cmd = cmd.read()
print 'rezyltat vipolnenia '+ otvet_cmd
client.send(otvet_cmd)
# надо сделать выход из цикла =)
# здесь запись в лог фаил (это надо сделать как доп опцию

else:
client.send('net kontakta')


import socket
print 'vibirite vashu OS'
print '1 - Windows'
print '2 - Linux'
sistem = raw_input("--> ")
if sistem == 1:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
elif sistem == 2:
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
print 'adres servera'
server = raw_input("--> ")
print 'port servera'
port = raw_input("--> ")
sock.connect((server,port))
paket = s.recv(2048)
if paket == name:
print 'vvedite ima'
name = raw_input("--> ")
print 'vvedite pass'
password = raw_input("--> ")
client.send(' ', password,' ', name)
paket = s.recv(2048)
if paket == "est kontakt":
print 'gotov k peredache komandi'
# Тут швыряем команды в бесконечном цикле =)
for targar in -1:
komanda = raw_input("--> ")
client.send(komanda)
print 'rezyltat vipolnenia'
paket = s.recv(2048)
print paket
# надо сделать выход из цикла

elif paket == "net kontakta":
print 'avtorizachija ne ydolas'
s.close()


ВОт вообщем..
Кстати не желательно начинать учить питон с сокетов, не зная даже о существовании функции pass
((
Зы: вот я тут чат устроил... вообщем закрыто, если что велкам ту PM.