Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Below you can find the guide in Turkish/English.
Bu Python kütüphanesi, Discord, llinput gibi API ve Terminal tasarım olarak çeşitlilikler sunar.
kütüphaneyi indirin:
pip install lama2923
from lama2923 import clear_screen
clear_screen()
Ekranı temizler.
from lama2923 import calculate_elapsed_time, get_time
start_time = get_time()
# Code
end_time = get_time()
elapsed_time = calculate_elapsed_time(start_time, end_time)
print(elapsed_time)
İki zaman arasındaki geçen süreyi hesaplar ve milisaniye, saniye, dakika, saat, gün cinsinden döndürür.
from lama2923 import rainbow_text
rainbow_text("Merhaba Dünya", LOOP=3, Speed="Slow", section="Full")
Bu bölüm eğlence için yapılmıştır denebilir :D Arkadaşlarınızı şaşırtmak adına kullanabilirsiniz.
from lama2923 import check_port
port_open = check_port("127.0.0.1", 80)
print(f"Port açık mı? {port_open}")
Belirtilen IP adresindeki portun açık olup olmadığını kontrol eder.
from lama2923 import check_internet
internet_connected = check_internet()
print(f"İnternet bağlantısı var mı? {internet_connected}")
İnternet bağlantısını kontrol eder.
from lama2923 import lprint
lprint("Merhaba Dünya")
print fonksiyonu ile aynıdır fakat soldan sağa doğru yazının boyutuna göre, hızlı/yavaş şekilde, animasyonlu bir çıktı verir.
from lama2923 import linput
user_input = linput("İsminiz: ", autocorrect=True)
linput input ile aynıdır fakat lprint gibi animasyonlu bir şekilde çıktı verir. autocorrect özelliği şuna yarar: input'dan önceki yazılan yazıların yazılmasını engeller. Yani Yanlışıkla daha input görünmeden 'Enter' basıldığında geçmemesini sağlayabilirsiniz.
from lama2923 import formatted_number
num = formatted_number(100000.1234) # çıktı : 100.000,1234
print(f"Biçimlendirilmiş sayı: {num}")
Girilen sayıyı (str kabul edilir) sayı kurallarına uygun biçimde çıktı verir
from lama2923 import reverse_formatted_number
num = reverse_formatted_number("12.345,678") # 12345.678
print(f"Orijinal sayı: {num}")
Girilen sayıyı (str kabul edilir) sayı kurallarına uygun biçimde olan sayıyı ters çevirir
from lama2923 import Discord
webhook_url = 'WEBHOOK-URL-HERE'
webhook = Discord.Webhook(webhook_url=webhook_url)
Embed2 = Discord.Embed(title="", description="")
Embed2.set_image(r"https:\\xxxxxxx") # Image URL
Embed = Discord.Embed(title="Merhaba", description="Dünya", color=0x00ff00)
Embed.add_field(name="B-", value="Ben Yaşıyorum!", inline=False)
Embed.set_footer(text="Program")
Embed.set_image("image.png") # Image Path
Status = webhook.send_webhook(Content="Sana yeni bir haberim var! eee" , embeds=[Embed, Embed2])
Discord Webhook ile mesaj göndermeye yarar
from lama2923 import Discord
AUTHOR_TOKEN = "YOUR_TOKEN"
Author = Discord.Author(AUTHOR_TOKEN)
Channel_ID = "YOUR_CHANNEL"
Author.send_message(Channel_ID, "Merhaba Dünya!", files=["src/image.png", ])
status, Messages = Author.get_channel_messages(Channel_ID, limit=10)
for I, Message in enumerate(Messages):
print(f"{I}: {Message['content']}")
Discord Author ile Bir kanala mesaj gönderip o kanalın 10 tane mesajını almaya yarar.
from lama2923 import color_mixer
print(color_mixer(["blue"]) + "Bu Yazının Rengi Mavi") # Tek bir renk.
print(color_mixer(["blue", "red"]) + "Bu Yazının Rengi Mor") # 2 Rengin Karışımı.
print(color_mixer({"blue": 15, "green": 35, "red": 100}) + "Bu Yazının Rengi Kahverengi") # 3 Rengin Belirli Oranda Karışımı.
print(color_mixer((0, 255, 0)) + "Bu Yazının Rengi Yeşil") # R.G.B Formatında Renk
print(color_mixer(0xFFA500) + "Bu Yazının Rengi Turuncu") # Hexadecimal Kodu
# --------------
print(color_mixer(["blue"], return_type="hex")) # Çıktı: #0000FF
print(color_mixer(["blue"], return_type="rgb")) # Çıktı: (0, 0, 255)
color_mixer ile istediğiniz rengi kolaylıkla Ayarlayabilirsiniz.
from lama2923 import Hotkey
Hotkey('ctrl', 'shift', 'a', target=function).start()
def function():
print("Hotkey tetiklendi!")
from lama2923 import llinput
Password = llinput("Şifreni Gir: ", inputtype="password-lastkey-clearend", promptcolor={"blue": 15, "green": 35, "red": 100}, inputcolor={"yellow": 80, "green": 10}, wendcolor=["blue"], endcolor=["blue"], wend=" <", end="!")
print("Şifre Başarıyla Girildi!", Password)
llinput çok işlevli özelleştirilebilir linput versiyonudur.
sep
ve end
normal şekilde çalışır.wend
özelliği, {prompt} [kullanıcı girdisi] + {wend}
formatındadır. end
'den farklı olarak, kullanıcı girdisini prompt ve wend arasına yerleştirir.max_length
, kullanıcının girebileceği maksimum karakter sayısını sınırlar.min_length
, kullanıcının girebileceği minimum karakter sayısını sınırlar.forceint
, kullanıcının yalnızca sayı girmesini sağlar. | forcestr
ile aynı anda kullanılamaz. negativeint
ile birlikte kullanılabilir.negativeint
, kullanıcının yalnızca negatif sayı girmesini sağlar. | forcestr
ile aynı anda kullanılamaz. forceint
ile birlikte kullanılabilir.forcestr
, kullanıcının yalnızca harf girmesini sağlar. | forceint
ve negativeint
ile aynı anda kullanılamaz.forceinput
, kullanıcının boş girdi göndermesini engeller.startswith
özelliği ("", False)
formatındadır. Kullanıcı girdisinin, atanan yazıyla başlamasını sağlar. Eğer True
ise bu başlangıç değeri silinemez; False
ise kullanıcı bu değeri silebilir.forcestartswith
, kullanıcının girdiye başlaması gereken değerlerin listesidir. Örneğin, ["https", "http"]
kullanıcının bir link girmesini zorunlu kılar.forceendswith
, kullanıcının girdiyi bitirmesi gereken değerlerin listesidir. Temel olarak forcestartswith
'in başlangıç yerine bitiş versiyonudur.choices
([], False)
formatındadır. Liste değeri, kullanıcının seçebileceği değerleri belirler. Boolean değeri, büyük/küçük harf duyarlılığını belirler; False
ise büyük/küçük harf duyarlıdır.blockedchars
, kullanıcının giremeyeceği karakterlerin listesidir.availablechars
, kullanıcının girebileceği karakterlerin listesidir. blockedchars
ile çakışan karakterler yasaklı kabul edilir.forceinputlen
, kullanıcıyı belirli bir girdi uzunluğuna zorlar.inputtype
, input türünü belirler ve ["world", "password", "password-lastkey", "password2", "password2-lastkey"]
türlerinden biri olabilir.inputcolor
, promptcolor
, wendcolor
, ve endcolor
list/tuple/dict değerleridir ve ["red", "green", "yellow", "blue", "magenta", "cyan", "white", "black"]
renklerinden biri olabilir. Örneğin, ["red"]
veya ["red", "blue"]
kullanarak renkleri karıştırabilir veya {"blue": 15, "green": 35, "red": 100}
formatında hangi oranlarda renk eklemek istediğinizi belirleyebilirsiniz. Ayrıca, bu renkler RGB tuple formatında (255, 0, 0)
veya hexadecimal formatında 0xFF0000
olarak da belirtilebilir.custom_enter_check_func
Bu değere herhangi bir callable obje atayabilirsiniz, eğer True döndürürse input alınır, ancak False döndürülürse input alınmaz. Sadece input_str argümanı vardır.custom_delete_ch_check_func
Bu değere herhangi bir callable obje atayabilirsiniz, eğer True döndürürse karakter silinmez, ancak False döndürülürse karakter silinir. input_str ve chdata argümanı vardır.custom_press_key_check_func
Bu değere herhangi bir callable obje atayabilirsiniz, eğer True döndürürse karakter eklenir, ancak False döndürülürse karakter eklenmez. input_str ve chdata argümanı vardır.def check_enter(input_str):
"""
Eğer input_str "lama2923" ise input alınır.
"""
input_str # Girdi olarak verilmek istenen input_str
if input_str == "lama2923":
return True
return False
def check_delete(input_str, chdata):
"""
Eğer silinmeye çalışılan karakter "a" ise silinmez.
"""
ch, pos = chdata
pos # Karakterin input_str'de hangi konumda silinmeye çalışıldığını verir, Örnek input_str: "Selam", ch: "m", pos: 4, olsun bu durumda m karakterinin silineceği yer 4. pozisyon yani "Sela" yazılmaya çalışılıyor.
ch # Silinmeye çalışılan karakter
input_str # Daha karakter silinmemiş olan input_str
if ch == "a":
return False
return True
def check_press_key(input_str, chdata):
import string
"""
Eğer Basılan karakter bir noktalama işareti ise o karakter input'a eklenmez.
"""
ch, pos = chdata
pos # Karakterin input_str'de hangi konuma eklenmeye çalışıldığını verir, Örnek input_str: "Selam", ch: "!", pos: 5, olsun bu durumda ! karakterinin geleceği yer 5. pozisyon yani "Selam!" yazılmaya çalışılıyor.
input_str # Daha karakter eklenmemiş olan input_str
ch # Basılan karakter
if ch in list(string.punctuation):
return False
return True
llinput("Şifreni Gir: ", custom_delete_ch_check_func=check_delete, custom_enter_check_func=check_enter, custom_press_key_check_func=check_press_key)
from lama2923 import get_directory_tree
start_directory = r'data' # Başlangıç dizini
depth = 10 # Derinlik
style = 'normal' # Stil
directory_tree = get_directory_tree(start_directory, depth=depth, style=style)
print(directory_tree)
örnek çıktı
└── data\
├── src\
| └── Images\
| ├── Images2.png
| └── ımage1.png
└── x.txt
get_directory_tree özelliği belirli bir dizindeki dosyaları/klasörleri tasarıma uygun biçimde döndürmektir.
startpath
: Başlangıç dizininin yolunu belirtir. Bu, dizin ağacının oluşturulmasına başlanacak kök dizindir. Örneğin data\src
.
depth
: Geçerli derinliği belirtir. Fonksiyonun çağrıldığı sırada dizin ağacının hangi derinlikte olduğunu gösterir. Varsayılan değeri 0
olup, bu da kök dizini temsil eder. Her bir alt dizine geçildiğinde bu değer artırılır.
max_depth
: Dizin ağacının oluşturulmasında maksimum derinliği belirtir. Bu, dizin ağacının ne kadar derinlikte gösterileceğini kontrol etmek için kullanılır. Özellikle çok fazla içeriği olan dizinleriniz için bu değeri kullanmanızı performans için öneririm. Varsayılan değeri float('inf')
olup, bu sonsuz derinlik anlamına gelir. Örneğin, max_depth=2
sadece kök dizin ve iki alt seviye dizinleri gösterir.
prefix
: Geçerli dizin ve dosya adlarının önüne eklenen önek karakterlerdir. Bu önekler, dizin yapısının doğru bir şekilde görselleştirilmesine yardımcı olur ve genellikle boşluk veya dikey çizgiler gibi karakterlerden oluşur. Varsayılan değeri ''
'dır.
is_last
: Geçerli dizin veya dosyanın, üst dizindeki son öğe olup olmadığını belirtir. Bu bilgi, doğru biçimlendirme ve önek karakterlerin ayarlanmasında kullanılır. Varsayılan değeri True
'dır.
style
: Dizin ağacının hangi stil ile oluşturulacağını belirtir. Önceden tanımlı stillerden birini seçer. Varsayılan değeri 'normal'
'dir.
custom_style
: Kullanıcı tarafından tanımlanan özel bir stil belirtir. Bu, branch
ve spacing
gibi öznitelikleri içerir ve fonksiyon, belirtilen bu stili kullanarak dizin ağacını oluşturur. Eğer custom_style
belirtilmişse, style
parametresi göz ardı edilir.
örnek custom_style
custom_style = {
'branch': ('>>> ', '<<< ', '|||', '\\'),
'spacing': ' '
}
çıktı
<<< data\
>>> src\
||| <<< Images\
||| >>> Images2.png
||| <<< ımage1.png
<<< x.txt
kullanabileceğiniz bütün stiller
normal
bold
thin
compact
double
dash
star
plus
wave
hash
dot
pipe
slash
backslash
equal
colon
semicolon
exclamation
question
caret
percent
at
tilde
bracket
brace
paren
angle
quote
apos
underscore
plusminus
doubleangle
box
arrow
This Python library offers a variety of APIs and Terminal designs such as Discord and llinput.
Install the necessary modules to use this library:
pip install lama2923
from lama2923 import clear_screen
clear_screen()
Clears the screen.
from lama2923 import calculate_elapsed_time, get_time
start_time = get_time()
# Code
end_time = get_time()
elapsed_time = calculate_elapsed_time(start_time, end_time)
print(elapsed_time)
Calculates the elapsed time between two points and returns it in milliseconds, seconds, minutes, hours, and days.
from lama2923 import rainbow_text
rainbow_text("Hello World", LOOP=3, Speed="Slow", section="Full")
This section is for fun! You can use it to surprise your friends.
from lama2923 import check_port
port_open = check_port("127.0.0.1", 80)
print(f"Is the port open? {port_open}")
Checks if the specified port on the given IP address is open.
from lama2923 import check_internet
internet_connected = check_internet()
print(f"Is there an internet connection? {internet_connected}")
Checks for an internet connection.
from lama2923 import lprint
lprint("Hello World")
It works the same as the print function but provides animated output from left to right based on the length of the text.
from lama2923 import linput
user_input = linput("Your name: ", autocorrect=True)
linput works the same as input but provides animated output like lprint. The autocorrect feature prevents writing errors before the input appears. It ensures that pressing 'Enter' mistakenly before the input is shown does not proceed.
from lama2923 import formatted_number
num = formatted_number(100000.1234) # output: 100.000,1234
print(f"Formatted number: {num}")
Takes a number (accepted as a string) and outputs it in a properly formatted manner.
from lama2923 import reverse_formatted_number
num = reverse_formatted_number("12.345,678") # 12345.678
print(f"Original number: {num}")
Takes a properly formatted number (accepted as a string) and reverses it.
from lama2923 import Discord
webhook_url = 'WEBHOOK-URL-HERE'
webhook = Discord.Webhook(webhook_url=webhook_url)
Embed2 = Discord.Embed(title="", description="")
Embed2.set_image(r"https:\\xxxxxxx") # Image URL
Embed = Discord.Embed(title="Hello", description="World", color=0x00ff00)
Embed.add_field(name="I-", value="I am alive!", inline=False)
Embed.set_footer(text="Program")
Embed.set_image("image.png") # Image Path
Status = webhook.send_webhook(Content="I have news for you! uhh" , embeds=[Embed, Embed2])
Sends a message using Discord Webhook.
from lama2923 import Discord
AUTHOR_TOKEN = "YOUR_TOKEN"
Author = Discord.Author(AUTHOR_TOKEN)
Channel_ID = "YOUR_CHANNEL"
Author.send_message(Channel_ID, "Hello World!", files=["src/image.png", ])
status, Messages = Author.get_channel_messages(Channel_ID, limit=10)
for I, Message in enumerate(Messages):
print(f"{I}: {Message['content']}")
Allows sending a message to a channel and retrieving the last 10 messages from that channel using Discord Author.
from lama2923 import color_mixer
print(color_mixer(["blue"]) + "This text is Blue") # Single color.
print(color_mixer(["blue", "red"]) + "This text is Purple") # Mix of 2 colors.
print(color_mixer({"blue": 15, "green": 35, "red": 100}) + "This text is Brown") # Mix of 3 colors with specified proportions.
print(color_mixer((0, 255, 0)) + "This text is Green") # R.G.B format color
print(color_mixer(0xFFA500) + "This text is Orange") # Hexadecimal code
# --------------
print(color_mixer(["blue"], return_type="hex")) # Output: #0000FF
print(color_mixer(["blue"], return_type="rgb")) # Output: (0, 0, 255)
With color_mixer, you can easily adjust the desired color.
from lama2923 import Hotkey
Hotkey('ctrl', 'shift', 'a', target=function).start()
def function():
print("Hotkey triggered!")
from lama2923 import llinput
Password = llinput("Enter your Password: ", inputtype="password-lastkey-clearend", promptcolor={"blue": 15, "green": 35, "red": 100}, inputcolor={"yellow": 80, "green": 10}, wendcolor=["blue"], endcolor=["blue"], wend=" <", end="!")
print("Password Entered Successfully!", Password)
llinput is a highly functional, customizable version of linput.
sep
and end
work as usual.wend
feature is in the format {prompt} [user input] + {wend}. Unlike end
, it places the user input between prompt and wend.max_length
limits the maximum number of characters the user can enter.min_length
limits the minimum number of characters the user can enter.forceint
allows the user to enter only numbers. | Cannot be used with forcestr
. Can be used with negativeint
.negativeint
allows the user to enter only negative numbers. | Cannot be used with forcestr
. Can be used with forceint
.forcestr
allows the user to enter only letters. | Cannot be used with forceint
and negativeint
.forceinput
prevents the user from submitting empty input.startswith
is in the format ("", False). It sets the beginning of the user input to the given string. If True, this prefix cannot be deleted; if False, the user can delete it.forcestartswith
is a list of values that the user must start their input with, e.g., ["https", "http"] requires the user to enter a link.forceendswith
is a list of values that the user must end their input with.choices
is in the format ([], False). It provides a list of acceptable choices. The boolean determines case sensitivity; False means case-sensitive.blockedchars
is a string of characters that the user cannot enter.availablechars
is a string of characters that the user can enter. Conflicts with blockedchars
will result in the character being blocked.forceinputlen
forces the user to enter input of a specific length.inputtype
specifies the type of input and can be one of the following types: ["world", "password", "password-lastkey", "password2", "password2-lastkey"]
.inputcolor
, promptcolor
, wendcolor
, and endcolor
are list/tuple/dict values and can be one of the colors from ["red", "green", "yellow", "blue", "magenta", "cyan", "white", "black"]
. For example, you can use ["red"]
or ["red", "blue"]
to mix colors or specify the ratios of colors you want to add in the format {"blue": 15, "green": 35, "red": 100}
. Additionally, these colors can also be specified in RGB tuple format as (255, 0, 0)
or in hexadecimal format as 0xFF0000
.custom_enter_check_func
You can assign any callable object to this value. If it returns True, the input is accepted, but if it returns False, the input is rejected. It only has the input_str argument.custom_delete_ch_check_func
You can assign any callable object to this value. If it returns True, the character is not deleted, but if it returns False, the character is deleted. It has the input_str and chdata arguments.custom_press_key_check_func
You can assign any callable object to this value. If it returns True, the character is added, but if it returns False, the character is not added. It has the input_str and chdata arguments.def check_enter(input_str):
"""
If input_str is "lama2923", input is accepted.
"""
input_str # The input_str intended to be provided as input
if input_str == "lama2923":
return True
return False
def check_delete(input_str, chdata):
"""
If the character being attempted to delete is "a", it will not be deleted.
"""
ch, pos = chdata
pos # Indicates the position in input_str where the character is being attempted to delete. Example: input_str: "Hello", ch: "o", pos: 4, in this case, the "o" character is at position 4 and "Hell" is being attempted to type.
ch # The character being attempted to delete
input_str # The input_str before the character is deleted
if ch == "a":
return False
return True
def check_press_key(input_str, chdata):
import string
"""
If the pressed character is a punctuation mark, it will not be added to the input.
"""
ch, pos = chdata
pos # Indicates the position in input_str where the character is being attempted to add. Example: input_str: "Hello", ch: "!", pos: 5, in this case, the "!" character is at position 5 and "Hello!" is being attempted to type.
input_str # The input_str before the character is added
ch # The pressed character
if ch in list(string.punctuation):
return False
return True
llinput("Enter your password: ", custom_delete_ch_check_func=check_delete, custom_enter_check_func=check_enter, custom_press_key_check_func=check_press_key)
from lama2923 import get_directory_tree
start_directory = r'data' # Starting directory
depth = 10 # Depth
style = 'normal' # Style
directory_tree = get_directory_tree(start_directory, depth=depth, style=style)
print(directory_tree)
example output
└── data\
├── src\
| └── Images\
| ├── Images2.png
| └── ımage1.png
└── x.txt
The get_directory_tree feature returns the files/folders in a specific directory in a design-friendly format.
startpath
: Specifies the path of the starting directory. This is the root directory where the directory tree creation will start. For example data\src
.
depth
: Indicates the current depth. It shows at what depth the directory tree is during the function call. The default value is 0
, representing the root directory. This value increases as it goes down to each subdirectory.
max_depth
: Specifies the maximum depth in the creation of the directory tree. It is used to control how deep the directory tree will be displayed. I recommend using this value for directories with a lot of content for performance. The default value is float('inf')
, meaning infinite depth. For example, max_depth=2
will only show the root directory and two levels of subdirectories.
prefix
: The prefix characters added before the names of the current directories and files. These prefixes help in visualizing the directory structure correctly and usually consist of characters like spaces or vertical lines. The default value is ''
.
is_last
: Indicates whether the current directory or file is the last item in its parent directory. This information is used for proper formatting and setting prefix characters. The default value is True
.
style
: Specifies which style the directory tree will be created in. It selects one of the predefined styles. The default value is 'normal'
.
custom_style
: Specifies a user-defined custom style. This includes attributes like branch
and spacing
, and the function uses the specified style to create the directory tree. If custom_style
is specified, the style
parameter is ignored.
example custom_style
custom_style = {
'branch': ('>>> ', '<<< ', '|||', '\'),
'spacing': ' '
}
output
<<< data\
>>> src\
||| <<< Images\
||| >>> Images2.png
||| <<< ımage1.png
<<< x.txt
all available styles
normal
bold
thin
compact
double
dash
star
plus
wave
hash
dot
pipe
slash
backslash
equal
colon
semicolon
exclamation
question
caret
percent
at
tilde
bracket
brace
paren
angle
quote
apos
underscore
plusminus
doubleangle
box
arrow
FAQs
Sikimsonik bir kütüphane
We found that lama2923 demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.